2014-11-28 5 views
4

У меня был неудачный модульный тест и задавался вопросом, почему. Я узнал, что тест выполняется 400 раз. Пытаясь выяснить, что вызывает тест, чтобы выполнить столько раз, я уменьшил код к следующему:JUnit запускает тест несколько раз

package reproduce; 

import org.junit.After; 
import org.junit.Test; 
import static org.junit.experimental.results.PrintableResult.testResult; 

public class FailingTest 
{ 
    static int objCount = 0; 

    public FailingTest() 
    { 
     objCount++; 
    } 

    @Test 
    public void test() 
    { 
     System.out.println(objCount); 
    } 

    @After 
    public void tearDown() 
    { 
     testResult(FailingTest.class); // comment this to run only once 
    } 
} 

В моей Teardown() метод, я пытаюсь выяснить, результат испытаний, потому что моя операция очистки может занять несколько минут, поэтому я хочу очистить только в случае сбоя, но не в случае succcess.

Я нашел использование testResult() в code of the verifier rule и подумал, что это будет полезно для меня, но это не будет полезно, если мои тесты будут выполняться в 400 раз чаще.

Это ошибка экспериментального PrintableResult, я что-то делаю неправильно или есть другой/более простой способ достижения моего предполагаемого результата?

+1

Хороший минимальный тестовый чехол. Однако, со стороны, я не совсем понимаю, что понимаю прецедент. Какую очистку вам нужно сделать, чтобы вы могли с удовольствием пропустить в некоторых случаях, но не другие? –

+0

@OliverCharlesworth: Если тест не был успешным, мне нужно сбросить виртуальную машину на моментальный снимок, который занимает 5 минут. Я злоупотребляю JUnit для выполнения системных тестов. Метод tearDown() должен стать частью базового класса. –

+2

См. Https://github.com/pomkine/junit/blob/master/src/main/java/org/junit/experimental/results/PrintableResult.java. Внутри testResult кажется, что ваш тест снова выполнен, так что это вызов рекурсии. – pomkine

ответ

2

См. Junit PrintableResult source Внутри testResult кажется, что ваш тест выполнен снова, так что это вызов рекурсии. Некоторая полезная информация о получении результатов тестирования может быть найдена here

Смежные вопросы