Выполнение нескольких тестов JUnit с ANT для регрессии и гранулярности - PullRequest
0 голосов
/ 21 ноября 2011

Я пытаюсь настроить скрипт сборки ANT, который компилирует код, компилирует тесты, запускает юнит-тесты и затем строит.Все это делается через отдельные цели с зависимостями, т.е.

<target name="compile">
  <javac>...
</target>
<target name="compile-tests" depends="compile">
  <javac>...
</target>
<target name="unittest" depends="compile-tests">
  <junit...
   <test ...
  <fail if="tests.failed" ..
</target>
<target name="build" depends="compile, unittest">
</target>

Каждый «тест» в задаче «junit» фокусируется на одной части приложения (обычно пакет за пакетом) и указывает на Junit TestSuite.Эта настройка позволяет запускать все тесты при вызове сборки, но это не идеально для повседневной разработки.

Я хотел бы иметь возможность сделать 2 вещи:

  1. Запустить все тесты в сборке (как показано выше)
  2. Запустить тесты отдельно от ant

Моим решением для (2) было использование нескольких antcallзадачи, которые на самом деле не лучшая практика.Во время этих вызовов были установлены разные свойства для запуска всех тестов, поскольку для каждого требовалось отдельное свойство:

<!-- test package p2 with ant unittest -Dtest.p2=true -->
<target name="unittest" depends="compile-tests">
  <junit...
   <test if="test.p1" ...
   <test if="test.p2"
  <fail if="tests.failed" ..
</target>

<target name="unittestall">
  <property name="test.p1" value="true"/>
   ...
</target>

<target name="build" depends="compile, unittest">
  <antcall target="unittestall" />
  <antcall target="clean" />
  <antcall target="compile" />
</target>

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

Итак, мой вопрос: как мне лучше настроить ANT и Junit, чтобы все тесты можно было запускать как часть сборки И так, чтобы можно было запускать отдельные тесты?

Спасибо:)

от Джошуа Англии

PS ANT 1.8 и Junit 4.10:)

1 Ответ

1 голос
/ 21 ноября 2011

Как-то так?

<target name="unittest-p1"></target>
<target name="unittest-p2"></target>
<target name="unittest-p3"></target>

<target name="unittest" depends="unittest-p1, unittest-p2, unittest-p3/>

Затем вы можете запустить все тесты, пройдя цель юнит-теста:

ant unittest

(или любую цель, которая зависит от юнит-теста)

И вы можете запустить любой отдельный тест из набора тестов, вызвав соответствующую цель, например,

ant unittest-p1

Если вы столкнетесь с большим количеством дубликатов в нескольких целях Junit, вы можете привести это в порядок.поместив все обычные вещи в macrodef .

...