Как запустить модульные тесты только для исходных файлов, которые изменились? - PullRequest
6 голосов
/ 25 июня 2009

Есть ли способ заставить ant запускать модульные тесты только для классов Java, которые он создает? Например, если MyClass.java устарел, ant создаст MyClass.class. После этого я хочу, чтобы он также запускал MyClassTest и MyClassTestSuite, если они существуют. Это не должно быть основано на соглашении об именах. Я хотел бы использовать аннотации или любой другой метод, который работает.

РЕДАКТИРОВАТЬ: Несколько человек поспешили сказать, что это плохая идея. Это было бы , если бы я планировал зарегистрироваться без запуска всех наших модульных тестов. В моем основном проекте более 16 тыс. Юнит-тестов, на выполнение которых уходит около 20 минут. Я буду запускать их все перед регистрацией, но совершенно непрактично запускать весь пакет каждый раз, когда я меняю файл. Извините, я должен был дать больше контекста.

Ответы [ 7 ]

6 голосов
/ 25 июня 2009

Я бы не рекомендовал этот подход, есть большая вероятность пропуска ошибок, вызванных побочными эффектами.

4 голосов
/ 25 июня 2009

Это кажется мне плохой идеей. Конечно, измененные исходные файлы требуют тестирования, но также и любые файлы, которые зависят от этих файлов, и любые файлы, которые зависят от них и т. Д. Вам нужно будет отследить, какой файл зависит от других файлов, и это довольно большая проблема для решения.

По моему мнению, если проект достаточно большой, чтобы получить значительную выгоду в попытках разрешить деревья зависимостей тестирования, возможно, проект слишком велик? Может быть, пришло время разделить его на отдельные проекты, которые работают вместе, и каждый из них можно было бы проверить отдельно друг от друга.

4 голосов
/ 25 июня 2009

Это не так просто ...

Взгляните на Атласский клевер . У него есть функция, о которой вы мечтаете, но она не бесплатна.

3 голосов
/ 25 июня 2009

Я не знаю, как это сделать с ANT, но вы можете сделать что-то подобное в Eclipse.

Кент Бек написал плагин Eclipse под названием JUnit Max, который запускает ваши модульные тесты после сохранения кода. Сначала он запускает тесты «скорее всего не получится».

JUnit Max

3 голосов
/ 25 июня 2009

Взгляните на Infinitest, это плагин для Eclipse (и Intellij), который запускает тесты на основе только что измененных исходных файлов:

Сайт Infinitest

Обзор см. Здесь:

Обзор скриншота

0 голосов
/ 25 июня 2009

Ну, вы могли бы сделать это, используя переменные, если вы следуете соглашению об именах. Получить список измененных файлов и запустить соответствующие тесты. Но я бы рекомендовал против этого, как объясняют другие ответы.

0 голосов
/ 25 июня 2009

Я хотел бы побеседовать с другими людьми, которые сказали, что это то, чего вы хотите избежать. Запуск только тестовых случаев для определенных классов, которые изменились, создает риск того, что вы внесете изменение, которое нарушит тест для класса, который не был изменен, но зависит от некоторого кода, который был изменен.

Это риск, даже если вы агрессивно настроены на программирование интерфейса и насмешливые зависимости в модульных тестах. Например, у статических служебных классов, вероятно, будет много классов, использующих их напрямую. Здесь было бы легко представить себе случай, когда вы могли бы внести изменения в метод статической утилиты, убедиться, что тесты для этого метода работали, и сломать кучу кода, который вызвал метод, если вы не запускали все свои тесты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...