You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
2.0 KiB
Java

import org.junit.jupiter.api.extension.*;
import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
import java.util.logging.Logger;
import static java.lang.System.currentTimeMillis;
/**
* Based on TimingExtension from JUnit 5 user guide, and BenchmarkExtension from Nicolai Parlog
* https://github.com/CodeFX-org/demo-junit-5/blob/master/src/main/java/org/codefx/demo/junit5/BenchmarkExtension.java
*/
public class BenchmarkExtension implements BeforeAllCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback, AfterAllCallback {
private static final Namespace NAMESPACE = Namespace.create( BenchmarkExtension.class );
private static final Logger LOGGER = Logger.getLogger( BenchmarkExtension.class.getName() );
@Override
public void beforeAll( ExtensionContext context ) {
context.getStore( NAMESPACE ).put( context.getRequiredTestClass(), currentTimeMillis() );
}
@Override
public void afterAll( ExtensionContext context ) {
long launchTime = context.getStore( NAMESPACE ).get( context.getRequiredTestClass(), long.class );
long elapsedTime = currentTimeMillis() - launchTime;
report( "Test class", context, elapsedTime );
}
@Override
public void beforeTestExecution( ExtensionContext context ) {
context.getStore( NAMESPACE ).put( context.getRequiredTestMethod(), currentTimeMillis() );
}
@Override
public void afterTestExecution( ExtensionContext context ) {
long launchTime = context.getStore( NAMESPACE ).get( context.getRequiredTestMethod(), long.class );
long elapsedTime = currentTimeMillis() - launchTime;
report( "Test", context, elapsedTime );
}
private static void report( String unit, ExtensionContext context, long elapsedTime ) {
String message = String.format( "%s '%s' took %d ms.", unit, context.getDisplayName(), elapsedTime );
context.publishReportEntry( "Benchmark", message );
LOGGER.info( message );
}
}