Где мне следует разместить свой тестовый код относительно кода, который он тестирует?
-
19-09-2019 - |
Вопрос
Два очевидных места, о которых я могу подумать, — это своего рода «тестовая» папка рядом с кодом, над которым я работаю.Итак, что-то вроде:
\project-code
\my-feature
\production-code
\testing
***my tests***
\co-workers-feature
\production-code
\testing
Или я мог бы выделить код тестирования в совершенно отдельную иерархию.Итак, что-то вроде:
\project-code
\my-feature
\co-workers-feature
\testing-project-code
\my-feature
***my tests***
\co-workers-feature
Я видел, как многие фреймворки используют второй подход, но в последнее время мы помещаем наш тестовый код в рабочий код в основном для удобства.Является ли один подход намного лучше другого или здесь есть передовая практика?
Решение
Я использую второй вариант.Это означает, что при необходимости я могу отправить код без тестов.Кроме того, глядя на класс или пакет, я знаю, где находятся модульные тесты для него.
Вот связанный вопрос:
Вы помещаете модульные тесты в тот же проект или в другой проект?
Другие советы
Разместите их там, где вам удобнее.При желании вы можете настроить свою систему сборки так, чтобы удалять их из конечного продукта.Тестирование — это «лучшая практика».Все, что упрощает тестирование, не снижая его эффективности, — это просто улучшение передовой практики.
Я предпочитаю держать модульные тесты рядом.Я видел, что вариант 1 работает хорошо.Для небольшого проекта оба подхода будут работать нормально, но по мере того, как проект становится все больше и больше, становится все труднее находить и поддерживать тесты, поскольку они находятся в совершенно другой части дерева.Если они близки, то их изменение будет естественным при изменении кода продукта.Если они находятся далеко, это потребует больше умственных усилий и будет больше игнорироваться.Это означает большую вероятность того, что они будут рассинхронизированы.
Обратите внимание: для этого вам понадобится система make, позволяющая условную компиляцию тестовых каталогов.Вам не нужно строить их каждый раз.Если вы не можете этого получить, возможно, потребуется отдельное дерево.
Если это веб-сайт, которым вы управляете, не помешает разместить все его в одной папке.Если вы выпускаете классическое программное обеспечение, то, как правило, рекомендуется иметь его отдельно, как в случае 2, чтобы случайно не вызвать раздувание при выпуске.
На мой взгляд, первый вариант имеет больше смысла, особенно с точки зрения SCM:Рабочий код и код тестирования прекрасно синхронизируются (как и должно быть), и если вы помечаете или разветвляете свой проект, вы помечаете или разветвляете как рабочий, так и тестовый код одновременно (как и должно быть).