Java 如何实现自定义秒表?

Java 如何实现自定义秒表?,java,junit,Java,Junit,Junit是否有一些特殊的注释可以自动计算花费的时间?如果是这样,我可以避免手动计算时间,如下所示: long start = System.currentTimeMillis(); // do something here long end = System.currentTimeMillis(); log.info("took time: {}", end - start); assertTrue((end - start) > 1000L); 现在我觉得秒表有点笨重: @Rule

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

long start = System.currentTimeMillis();
// do something here
long end = System.currentTimeMillis();
log.info("took time: {}", end - start);
assertTrue((end - start) > 1000L);
现在我觉得秒表有点笨重:

@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);
    }
};
@Rule
public Stopwatch stopwatch = new Stopwatch() {};

@Test
public void test_sleep_1_seconds()  {
    sleep1();
    assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1);
}
理想情况下,我想要这种效果:

@Test
@StopWatch
public void test_sleep_1_seconds(){
    sleep1();
    assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1L);
}
如何实现自定义的秒表?

是抽象的,但它没有任何抽象方法,因此不需要覆盖所有方法,但仍然需要实例化一个匿名类,这稍微不那么麻烦:

@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);
    }
};
@Rule
public Stopwatch stopwatch = new Stopwatch() {};

@Test
public void test_sleep_1_seconds()  {
    sleep1();
    assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1);
}
实际上,根据,
StopWatch
不需要是抽象的,它被更改为一个常规类。这些更新将在JUnit4.13中发布

如果您需要为所有测试检查此项,您可能希望覆盖
成功

@Rule
public Stopwatch stopwatch = new Stopwatch() {
    @Override
    protected void succeeded(long nanos, Description description) {
        assertTrue(runtime(TimeUnit.SECONDS) > 1);
    }
};

谢谢但是,如果我想实现一个定制的秒表注释——MyStopWatch,并直接在上面的测试方法上按需使用它,就像之前的
@test
一样,junit能否通过实现一些类来支持它?@朱国伟,这是可能的。我想您需要为此实现自定义