Junit有什么特殊的注释可以自动计算所花费的时间吗?如果是这样,我可以避免手动计算时间,如下所示:
long start = System.currentTimeMillis();
// do something here
long end = System.currentTimeMillis();
log.info("took time: {}", end - start);
assertTrue((end - start) > 1000L);现在我觉得StopWatch有点麻烦了:
@Rule
public Stopwatch stopwatch = new Stopwatch() {
@Override
protected void succeeded(long nanos, Description description) {
logInfo(description, "succeeded", nanos);
}
@Override
protected void failed(long nanos, Throwable e, Description description) {
logInfo(description, "failed", nanos);
}
@Override
protected void skipped(long nanos, AssumptionViolatedException e, Description description) {
logInfo(description, "skipped", nanos);
}
@Override
protected void finished(long nanos, Description description) {
logInfo(description, "finished", nanos);
}
};理想情况下,我想要这样的效果:
@Test
@StopWatch
public void test_sleep_1_seconds(){
sleep1();
assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1L);
}如何实现自定义StopWatch
发布于 2017-04-05 03:45:09
StopWatch是抽象的,但是它没有任何抽象方法,所以您不需要覆盖所有这些方法,但是仍然需要实例化一个匿名类,这稍微简单一些:
@Rule
public Stopwatch stopwatch = new Stopwatch() {};
@Test
public void test_sleep_1_seconds() {
sleep1();
assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1);
}实际上,根据#1110的说法,StopWatch不需要是抽象的,而是被更改为常规类。这些更新将在JUnit 4.13中发布。
如果您需要对所有测试进行检查,则可能需要重写succeeded。
@Rule
public Stopwatch stopwatch = new Stopwatch() {
@Override
protected void succeeded(long nanos, Description description) {
assertTrue(runtime(TimeUnit.SECONDS) > 1);
}
};https://stackoverflow.com/questions/43221155
复制相似问题