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
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 );
|
|
}
|
|
|
|
} |