Может ли Ant классифицировать тесты JUnit на основе иерархии наследования? - PullRequest
5 голосов
/ 01 июня 2011

Я работаю с устаревшим проектом, который имеет:

  • Чистые модульные тесты
  • Интеграционные тесты (медленно запускаются, имеют все виды неприятных зависимостей)

Я ищу самый простой способ запустить оба типа тестов отдельно с Ant.

Интересно, есть ли способ, чтобы Ant автоматически распознавал эти две категории на основе иерархии наследования:

StringUtilsTest extends TestCase  // "pure unit test"

против

ProductionDBTest extends AbstractTransactionalTesterBase // "integration test"

Существует иерархия абстрактныхсуперклассы, на которых основаны интеграционные тесты, но все они сводятся к некоторым классам тестов Spring и, в конечном итоге, AbstractSpringContextTests, который расширяет junit.framework.TestCase.

Другими словами, могу ли я различить в Ant тесты, которые (косвенно) расширить AbstractSpringContextTests и тесты, которые непосредственно расширяют TestCase?Или мне придется вручную пройти тесты и, например, поместить их в отдельные категории или TestSuites?(Есть много тестов, поэтому я бы не хотел этого делать.)


Разрешение : я попробовал подход Шона (очень многообещающий) , но не может заставить его работать (легко).В конце концов, я в конце концов прошел тесты полу-вручную, аннотировал чистые тесты (это была меньшая группа) с использованием установки, описанной в этого SO вопроса , и выполнял их сМуравей вот так .(Обратите внимание, что написание пользовательского TestRunner не необходимо.)

Ответы [ 3 ]

4 голосов
/ 01 июня 2011

Решением, которое мы использовали для классификации наших тестов JUnit, было использование пользовательской аннотации. Затем вы можете использовать пользовательский TestRunner с тем, которому можно дать флаг или аргумент относительно того, какие типы тестов запускать, или все они.

Извините, пример кода отсутствует, но создание аннотаций и TestRunner довольно просто, попробуйте!

2 голосов
/ 08 июня 2011

Простой способ - назвать ваши тестовые классы, заканчивающиеся типом теста

Допустим, мы проверяли даты.

DateTest.java (Быстрые нормальные тесты)

DateSysTest.java (долго работает)

Тогда было две цели, одна из которых в быстрых юнит-тестах

   <batchtest todir="your dir">
      <!--Run unit tests for each class with suffix Test, unless it is SysTest or StressTest-->
      <fileset dir="${src}/test"
        includes="**/*Test.java"
        excludes="**/*StressTest.java **/*SysTest.java" />
    </batchtest>

Затем вы создаете несколько целей для муравьев, одну для быстрых тестов, одну для sys-тестов и одну выполняющую их все ... Что-то в этом роде. То есть, если вы можете переименовать свои тестовые классы.

0 голосов
/ 01 июня 2011

Я сам этим не пользовался, ум.Но я знаю, что вы выражаете модульные тесты для запуска в качестве коллекции ресурсов, и они могут быть определены с ограничениями .И одним из возможных ограничений является « instanceof », которое позволяет выбирать классы на основе суперкласса.Это позволяет вам выбирать интеграционные тесты, а затем с помощью функции «разница» сбора ресурсов вы можете выбрать все остальное.Не так уж плохо, если не тривиально.Это работает в Ant 1.8+, я думаю.

...