如何排除@AfterClass方法花费的时间?

时间:2019-07-17 15:28:26

标签: java junit junit4

我参加了以下测试班,它报告说第一次测试花了2秒,第二次花了4秒。我希望JUnit输出每个测试用例的时间,而不考虑@BeforeClass@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);
    }
}

2 个答案:

答案 0 :(得分:0)

@BeforeClass@AfterClass为所有测试运行一个

您应该做的是在实例变量的帮助下使用@BeforeAfter

public class TimeTest {

    long timeInMillis=0;

    @Before
    public void before(){
       timeInMillis = System.currentTimeMillis();
    }

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

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

    @After
    public static void after() throws InterruptedException {
        long diff = System.currentTimeMillis() - timeInMillis;
        // log the diff or cast it to seconds
    }
}

答案 1 :(得分:0)

您不是第一个遇到此类问题的人。有很多在互联网上记录时间的示例。

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

There is an example的规则实施