Структура хранения unit-тестов в Django(и не только)-проекте?

Доброго времени суток. Задался вопросом покрытия unit-тестами кода. В питоне с этим не особо работал до этого. Погуглив, не могу определиться, какой вариант правильный (сомневаюсь между двумя).
Исходя из n-ого опыта с Java, в жаба-проектах практикуется следующее:
src-|
	-main
		|-com.trolololo.foo
	-test
		|-com.trolololo.foo

То есть, есть директория с кодом, есть параллельная директория с тестами, и в ней повторяется структура основной директории.

Погуглив, нашёл такой пример для питона - тесты ложатся в пакет с основным кодом, в файл tests.py или пакет tests. Для Django видел примеры, когда в каждом аппликейшене в корне создаётся файл/пакет tests, и всё пишется туда. Но вот не совсем понимаю, как быть при более сложной структуре.

Итак, есть 2 варианта:
1. По аналогии с Java, но структура повторяется в рамках аппликейшена:
project
	|- app1
		|- services
			|- foo.py
			|- bar
				|- qwe.py
		|- models.py
		|- views.py
		|- tests
			|- test_models.py
			|- test_views.py
			|- services
					|- test_foo.py
					|- bar
						|- test_qwe.py


2. Создавать файл tests.py, либо пакет tests рядом с кодом:
project
	|- app1
		|- services
			|- foo.py
			|- foo2.py
			|- bar
				|- qwe.py
				|- test_qwe.py
			|- tests
					|- test_foo.py
					|- test_foo2.py
		|- models.py
		|- views.py
		|- tests
			|- test_models.py
			|- test_views.py


Какой вариант правильный?
  • Вопрос задан
  • 1382 просмотра
Решения вопроса 1
sim3x
@sim3x
flat>>>nested

если ну совсем-совсем нужно сделать вложенность, то можно разделить большой файл на файлики и положить их в папку с названием директории и добавить пустой __init__.py
project
  |- app1
< вот такой фигни нет >
    |- services 
      |- foo.py
      |- bar
        |- qwe.py
</ вот такой фигни нет >
< для такой фигни есть commands >
    |-management
       |-commands
         |-__init__.py
         |-my_command.py
</ для такой фигни есть commands >
    |- models.py
    |- views.py
    |- tests
      |-__init__.py
      |- test_models.py
      |- test_models_supermodel.py
      |- test_views.py
      |-test_commands_my_command.py
  |-hugeapp
.....
    |- tests
       |-__init__.py
       |- test_models <<dir как питоновский пакет
          |-__init__.py           
             |- test_model1.py
             ....
             |- test_model999.py
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
suguby
@suguby
программист, python, django, mysql, git, hg, linux
Наверно тут суть в реюзе приложений джанги. Если вы планируете распространять приложения (хотя бы между своими проектами) то файл/пакет tests нужно держать внутри папки приложения. Прямая аналогия с templates.
Если же тесты функциональные, то есть на поведение всего проекта и/или связки приложений, то есстествено в корне проекта пакет и там модули тестов.
Но вообще мне лично папки tests в каждой app-е загромождают проект, когда он большой - сложно окинуть взглядом всё дерево проекта. Поэтому часто делаю один пакет tests в корне проекта и внутри приблизительно повторяю дерево проекта. Мухи от котлет отдельно, так сказать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы