Задать вопрос

Структура хранения 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


Какой вариант правильный?
  • Вопрос задан
  • 1418 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 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 в корне проекта и внутри приблизительно повторяю дерево проекта. Мухи от котлет отдельно, так сказать.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽