Время от времени я проверяю тему размещения тестов, и каждый раз большинство рекомендует отдельную структуру папок рядом с кодом библиотеки, но я обнаруживаю, что каждый раз аргументы совпадают и не настолько убедительны , Я заканчиваю тем, что помещаю свои тестовые модули где-то рядом с основными модулями.
Основная причина для этого: рефакторинг .
Когда я перемещаю вещи, я хочу, чтобы тестовые модули перемещались вместе с кодом; легко потерять тесты, если они находятся в отдельном дереве. Давайте будем честными, рано или поздно вы получите совершенно иную структуру папок, например django , flask и многие другие. Что хорошо, если тебе все равно.
Главный вопрос, который вы должны себе задать, это:
Я пишу:
- а) многоразовая библиотека или
- б) создание проекта, в котором собраны вместе несколько разделенных модулей?
Если a:
Отдельная папка и дополнительные усилия по поддержанию ее структуры могут быть более подходящими. Никто не будет жаловаться на то, что ваши тесты будут развернуты в для производства .
Но также легко исключить распространение тестов, когда они смешаны с основными папками; поместите это в setup.py :
find_packages("src", exclude=["*.tests", "*.tests.*", "tests.*", "tests"])
Если b:
Вы можете пожелать - как и каждый из нас - что вы пишете многократно используемые библиотеки, но большую часть времени их жизнь связана с жизнью проекта. Возможность легко поддерживать ваш проект должна быть приоритетом.
Тогда, если вы хорошо поработали, и ваш модуль хорошо подходит для другого проекта, он, вероятно, будет скопирован - не разветвлен или не превращен в отдельную библиотеку - в этот новый проект и перенесет расположенные рядом с ним тесты в та же структура папок проста по сравнению с поиском тестов в беспорядке, в котором оказалась отдельная папка. (Вы можете утверждать, что это не должно быть беспорядком, но давайте будем реалистичны здесь).
Так что выбор остается за вами, но я бы сказал, что с помощью смешанных тестов вы достигаете тех же целей, что и с отдельной папкой, но с меньшими усилиями по поддержанию порядка.