Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
JUnit 4 TestRule to run a test repeatedly for a specified amount of repititions
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention( RetentionPolicy.RUNTIME )
@Target( {
java.lang.annotation.ElementType.METHOD
} )
public @interface Repeat {
public abstract int times();
}
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
public class RepeatRule implements TestRule {
private static class RepeatStatement extends Statement {
private final int times;
private final Statement statement;
private RepeatStatement( int times, Statement statement ) {
this.times = times;
this.statement = statement;
}
@Override
public void evaluate() throws Throwable {
for( int i = 0; i < times; i++ ) {
statement.evaluate();
}
}
}
@Override
public Statement apply( Statement statement, Description description ) {
Statement result = statement;
Repeat repeat = description.getAnnotation( Repeat.class );
if( repeat != null ) {
int times = repeat.times();
result = new RepeatStatement( times, statement );
}
return result;
}
}
@bazi

This comment has been minimized.

Copy link

commented Mar 31, 2015

hi @fappel
i liked this JUnit rule. i am wondering what is the reasoning of making times method of Repeat annotation abstract? i see no use of it AFAIK.

@rbarbey

This comment has been minimized.

Copy link

commented Aug 4, 2015

I'd love to see this in the official JUnit project. What about creating a pull request out of this?

@methylene

This comment has been minimized.

Copy link

commented Dec 4, 2015

+1

@ghost

This comment has been minimized.

Copy link

commented Mar 22, 2016

+1

@mbjelac

This comment has been minimized.

Copy link

commented Apr 14, 2016

How many times will Before and After methods be called?

@coolersport

This comment has been minimized.

Copy link

commented Aug 29, 2016

Thanks for sharing @fappel. I've documented and tidied it up as well as incorporated @bazi's comment.

See my fork https://gist.github.com/coolersport/b0c26c601c7739d1cbf5f6ded8210bae

@cbismuth

This comment has been minimized.

Copy link

commented Sep 6, 2016

Nice work 👍 thank you @fappel.
It could be interesting to add a random wait option between executions with a default value set to 0 ms.

@cbismuth

This comment has been minimized.

Copy link

commented Sep 6, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.