Java 从JUnit测试时间中排除@Before方法持续时间

Java 从JUnit测试时间中排除@Before方法持续时间,java,junit,timing,Java,Junit,Timing,JUnit似乎包含了在报告测试计时之前执行@BeforeClass@所花费的时间 我正在使用JUnit4.12 在这种情况下,与测试相比显示23.863秒,总计25.649秒。 当我手动测试所有方法时,以下是细分: 10:11:20.074 [INFO] [mainId] beforeClass completed in 12516ms 10:11:40.083 [INFO] [mainId] beforeTest completed in 20009ms 10:11:44.171 [INFO

JUnit似乎包含了在报告测试计时之前执行@BeforeClass@所花费的时间

我正在使用JUnit4.12

在这种情况下,与测试相比显示23.863秒,总计25.649秒。 当我手动测试所有方法时,以下是细分:

10:11:20.074 [INFO] [mainId] beforeClass completed in 12516ms
10:11:40.083 [INFO] [mainId] beforeTest completed in 20009ms
10:11:44.171 [INFO] [mainId] start_test completed in 4076ms 
因此,如果我添加beforeTest和start_测试计时,我将接近UI中报告的时间

  • 有没有办法告诉JUnit只显示开始测试时间
现在我只是手动输出计时,如本文所示:

更新2017-07-27 实际上,问题在于before测试方法(@before)并不像我之前认为的那样是@BEFORECASE——我的日志记录中出现了错误。在我看来,它应该是可配置的,无论这一次是否包括在内。我正在使用@beforetest在每次测试之前设置数据

我已经确认,膨胀的时间会在UI中输出,也会从命令行输出maven surefire XML

public static class StopwatchTest {
     private static final Logger logger = Logger.getLogger("");

     private static void logInfo(Description description, String status, long nanos) {
         String testName = description.getMethodName();
         logger.info(String.format("Test %s %s, spent %d microseconds",
                                   testName, status, TimeUnit.NANOSECONDS.toMicros(nanos)));
     }

     @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
     public void succeeds() {
     }

     @Test
     public void fails() {
         fail();
     }

     @Test
     public void skips() {
         assumeTrue(false);
     }
 }

摘自

谢谢,但据我所知,这将输出到记录器,我已经有了(尽管这更整洁)。除非它也在UI中显示这些计时?@avvi谁在乎UI中显示什么?当经理要求提供测试报告时,您是否会将您的计算机发送给他们?实际上,当我在本地进行单元测试时,我关心UI中显示的内容。这引出了第二个问题,Junit.xml报告将显示什么时间?根据javadoc Junit.sourceforge.net/javadoc/org/Junit/runner/notification/‌​… testStarted()在每个@Test即将被调用时被调用,testFinished()在每个@Test完成时被调用,无论它是否通过。这个怎么样?作为一个例子,看看这个谢谢你的建议@ansh。我将尝试一下。我尝试使用RunListener,但时间仍然包括beforeTest时间。在内部,它必须在测试开始之前调用testStarted。