Единственный возможный способ, я вижу, что работа состоит в том, чтобы иметь несколько экземпляров <test>
элементов.
Проблема в том, что вы должны указать для каждого элемента <test>
какие методы вы хотите запускать. Я создал единственный тестовый класс, в котором есть статический инициализатор и два теста. При следующей <junit>
задачи я был в состоянии сделать то, что вы хотите:
<junit fork="yes">
<classpath>
<path refid="classpath" />
</classpath>
<formatter type="xml"/>
<test name="TestSimple" methods="testOne" toDir="firstRun" />
<test name="TestSimple" methods="testTwo" toDir="secondRun" />
</junit>
Из того, что я получаю из журналов сборки, то ясно, что они бежали в двух разных виртуальных машинах:
test:
...
[junit] Executing 'C:\Program Files\Java\jdk1.7.0_25\jre\bin\java.exe' with arguments:
[junit] '-classpath'
...
[junit] 'org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner'
[junit] 'TestSimple'
[junit] 'methods=testOne'
...
[junit] Executing 'C:\Program Files\Java\jdk1.7.0_25\jre\bin\java.exe' with arguments:
[junit] '-classpath'
...
[junit] 'org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner'
[junit] 'TestSimple'
[junit] 'methods=testTwo'
...
[junit] Test TestSimple FAILED
Я также вижу оператор System.out
, который я поставил в статическом инициализаторе в отчете каждого теста.
Важная деталь здесь является то, что вы должны сделать каждый <test>
тег переориентировать свой отчет в другой каталог, используя атрибут toDir
или изменить имя выходного файла, используя атрибут outfile
. Это потому, что имя файла отчета использует имя класса, а не метод, который вы используете. Это означает, что второй запуск перезапишет отчет первого запуска.
В вашем конкретном случае вы можете использовать <batchtest>
для всех тестов, которые могут работать в одной и той же JVM без проблем, и добавить тег <exclude>
, чтобы избежать проблемных тестов. Затем добавьте конкретный тег <test>
для каждого проблемного теста.
Они делают это потому, что атрибут methods
специально разработан для повторного запуска определенных методов или отдельных тестов, которые работают слишком медленно.Из documentation:
Методы атрибута могут быть полезны в следующих случаях:
- Метод испытания не удалось, и вы хотите, чтобы повторно запустить метод испытания на тесте исправить или повторно запустите тест под отладчиком Java, не получив , чтобы дождаться, пока другие методы тестирования (возможно, длительные) не пройдут до .
- Один или несколько методов тестирования работают медленнее, чем ожидалось , и вы хотите повторно запустить их под профилировщиком Java (без накладных расходов при запуске профайлера, в то время как другие методы тестирования выполняются ).
Но лично, и исходит от человека, который столкнулся с той же проблемой, как вы до этого, статические инициализаторы сосать! Я бы очень старался избавиться от них как можно скорее. И, цитируя @PeterNiederwieser, наличие новой JVM для каждого набора тестов сделает запуск вашего тестового пакета очень медленным!
Любые конкретные причины для этого? Просто подумайте, может ли быть какая-то работа в зависимости от того, что вам нужно для нового требования к VM ... – anishthecoder
@anishthecoder Мои методы тестирования используют некоторых соавторов, которые используют статические вещи, и я хочу, чтобы этот статический материал был очищен при каждом методе. На самом деле я столкнулся с проблемой, когда тесты проходят в локальной среде и не работают на производстве. –
Посмотрите, поможет ли это [Java: как «перезапустить» статический класс?] (Http://stackoverflow.com/questions/4631565/java-how-to-restart-a-static-class) – anishthecoder