Где мне следует разместить свой тестовый код относительно кода, который он тестирует?

StackOverflow https://stackoverflow.com/questions/1882707

  •  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:Рабочий код и код тестирования прекрасно синхронизируются (как и должно быть), и если вы помечаете или разветвляете свой проект, вы помечаете или разветвляете как рабочий, так и тестовый код одновременно (как и должно быть).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top