У меня был неудачный модульный тест и задавался вопросом, почему. Я узнал, что тест выполняется 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, я что-то делаю неправильно или есть другой/более простой способ достижения моего предполагаемого результата?
Хороший минимальный тестовый чехол. Однако, со стороны, я не совсем понимаю, что понимаю прецедент. Какую очистку вам нужно сделать, чтобы вы могли с удовольствием пропустить в некоторых случаях, но не другие? –
@OliverCharlesworth: Если тест не был успешным, мне нужно сбросить виртуальную машину на моментальный снимок, который занимает 5 минут. Я злоупотребляю JUnit для выполнения системных тестов. Метод tearDown() должен стать частью базового класса. –
См. Https://github.com/pomkine/junit/blob/master/src/main/java/org/junit/experimental/results/PrintableResult.java. Внутри testResult кажется, что ваш тест снова выполнен, так что это вызов рекурсии. – pomkine