Это проблема Eclipse, а не junit. Если мы используем это в качестве примера:
public class TimingTest {
@Test public void test1() {
System.out.println("test1");
sleep(1000);
}
@Test public void test2() {
System.out.println("test2");
sleep(2000);
}
@After public void after() {
System.out.println("after");
sleep(3000);
}
@AfterClass public static void afterClass() {
System.out.println("afterClass");
sleep(5000);
}
private static void sleep(int i) {
try {
Thread.sleep(i);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
тогда мы получим для test1 = 4s, test2 = 10s (в Eclipse). Тем не менее, бегун junit в Eclipse не использует информацию, которую ему дает junit. Интерфейс RunListener определяет методы testStarted, testFinished, testRunStarted, testRunFinished. Если мы посмотрим, когда эти методы вызываются, используйте:
public class RunJunitTestRunListener {
private static class MyListener extends RunListener {
private long runStart = 0L;
private long testStart = 0L;
@Override
public void testRunStarted(Description description) throws Exception {
System.out.println("runStarted");
runStart = System.currentTimeMillis();
super.testRunStarted(description);
}
@Override
public void testRunFinished(Result result) throws Exception {
System.out.println("runFinished " + (System.currentTimeMillis() - runStart) + "ms");
super.testRunFinished(result);
}
@Override
public void testStarted(Description description) throws Exception {
System.out.println("testStarted");
testStart = System.currentTimeMillis();
super.testStarted(description);
}
@Override
public void testFinished(Description description) throws Exception {
System.out.println("testFinished " + (System.currentTimeMillis() - testStart) + "ms");
super.testFinished(description);
}
}
public static void main(String[] args) {
JUnitCore core= new JUnitCore();
core.addListener(new MyListener());
core.run(TimingTest.class);
}
}
мы получаем вывод:
testFinished 4004ms
testFinished 5002ms
runFinished 14012ms
это то, что вы ожидаете. Eclipse добавляет @afterClass на время. Итак, если вы заботитесь о сроках ваших методов, вам нужно либо
- Запустите приведенный выше код, создайте свой собственный слушатель. Нет простого способа прикрепить слушателя к определенному тесту.
- Используйте набор для тестирования ( junit-benchmark , как предложил DaveBall, или JunitPerf
- Не делайте ничего медленного в @ AfterClass