首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现自定义StopWatch?

如何实现自定义StopWatch?
EN

Stack Overflow用户
提问于 2017-04-05 03:13:55
回答 1查看 69关注 0票数 0

Junit有什么特殊的注释可以自动计算所花费的时间吗?如果是这样,我可以避免手动计算时间,如下所示:

代码语言:javascript
复制
long start = System.currentTimeMillis();
// do something here
long end = System.currentTimeMillis();
log.info("took time: {}", end - start);
assertTrue((end - start) > 1000L);

现在我觉得StopWatch有点麻烦了:

代码语言:javascript
复制
@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);
    }
};

理想情况下,我想要这样的效果:

代码语言:javascript
复制
@Test
@StopWatch
public void test_sleep_1_seconds(){
    sleep1();
    assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1L);
}

如何实现自定义StopWatch

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 03:45:09

StopWatch是抽象的,但是它没有任何抽象方法,所以您不需要覆盖所有这些方法,但是仍然需要实例化一个匿名类,这稍微简单一些:

代码语言:javascript
复制
@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

代码语言:javascript
复制
@Rule
public Stopwatch stopwatch = new Stopwatch() {
    @Override
    protected void succeeded(long nanos, Description description) {
        assertTrue(runtime(TimeUnit.SECONDS) > 1);
    }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43221155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档