我对每个测试的运行时间都有轻微的JUnit不便。
我有一个@AfterClass
注释,最后一个运行的测试会将它的运行时添加到它中。
因此,报告将错误地显示最后一次运行的不良测试的长时间运行。
有没有办法从上次测试中排除其运行时间?
答案 0 :(得分:3)
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中)。但是,Eclipse中的junit runner没有使用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添加到时代。因此,如果您关心方法的时间安排,则需要
答案 1 :(得分:0)
如何在上次测试中包含/考虑运行时?
如果您正在测量性能,请使用微基准测试。查看junit-benchmark,我认为它是最简单的微基准测试库之一。