Как получить время теста в JUnit, используя @Rule? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть тестовый класс, который написан с использованием JUnit, и мне нужно регистрировать время каждого теста, используя аннотацию @Rule. Как я могу это сделать? Нужно ли использовать StopWatch ()?

1 Ответ

0 голосов
/ 02 ноября 2019

Вы можете использовать этот пример:

Источник

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Stopwatch;
import org.junit.runner.Description;

import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;

import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;

public class StopwatchTest {

     private static final Logger logger = Logger.getLogger(StopwatchTest.class.getSimpleName());

     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 finished(long nanos, Description description) {
             logInfo(description, "finished", nanos);
         }
     };

     @Test
     public void succeeds() {
     }

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

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

    @Test
    public void performanceTest() throws InterruptedException {
        long delta = 30;
        Thread.sleep(300L);
        assertEquals(300d, stopwatch.runtime(MILLISECONDS), delta);
        Thread.sleep(500L);
        assertEquals(800d, stopwatch.runtime(MILLISECONDS), delta);
    }
 }
...