首页 > 解决方案 > 如何排除 @AfterClass 方法所花费的时间?

问题描述

我运行了以下测试类,它报告第一个测试用了 2 秒,第二个用了 4 秒。我希望 JUnit 输出每个测试用例的时间,而不考虑@BeforeClassor@AfterClass方法的时间。

但显然它只将@AfterClass方法的时间包含在最后一个测试用例中,如果你问我,这根本没有意义。

有没有办法让 JUnit 仅输出每个测试用例所用时间的时间?

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class TimeTest {
    @Test
    public void test1() throws InterruptedException {
        Thread.sleep(2000);
    }

    @Test
    public void test2() throws InterruptedException {
        Thread.sleep(2000);
    }

    @AfterClass
    public static void afterClass() throws InterruptedException {
        Thread.sleep(2000);
    }
}

标签: javajunitjunit4

解决方案


你不是第一个遇到这样问题的人。互联网上有很多时间记录的例子。

我建议您使用 JUnit@Rule来解决您的问题并避免代码重复。(你不想timeInMillis = System.currentTimeMillis()在每个测试课上都写,是吗?)

有一个规则实现的例子


推荐阅读