A maneira mais fácil (como é necessária a quantidade mínima de código novo) para fazer isso é executar o teste como um teste parametrizado (anote com @RunWith(Parameterized.class)e adicione um método para fornecer 10 parâmetros vazios). Dessa forma, a estrutura executará o teste 10 vezes.
Esse teste precisaria ser o único na classe, ou melhor, todos os métodos de teste precisariam ser executados 10 vezes na classe.
Aqui está um exemplo:
@RunWith(Parameterized.class)
public class RunTenTimes {
@Parameterized.Parameters
public static Object[][] data() {
return new Object[10][0];
}
public RunTenTimes() {
}
@Test
public void runsTenTimes() {
System.out.println("run");
}
}
Com o exposto, é possível fazê-lo com um construtor sem parâmetros, mas não tenho certeza se os autores da estrutura pretendiam isso ou se isso seria interrompido no futuro.
Se você estiver implementando seu próprio corredor, poderá fazer com que o corredor execute o teste 10 vezes. Se você estiver usando um corredor de terceiros, com o 4.7, poderá usar a nova @Ruleanotação e implementar a MethodRuleinterface para que ela pegue a instrução e a execute 10 vezes em um loop for. A desvantagem atual dessa abordagem é essa @Beforee @Afteré executada apenas uma vez. Provavelmente, isso mudará na próxima versão do JUnit (o que @Beforeserá executado após o @Rule), mas independentemente você estará agindo na mesma instância do objeto (algo que não é verdadeiro para o Parameterizedcorredor). Isso pressupõe que qualquer corredor com o qual você esteja executando a classe reconheça corretamente as @Ruleanotações. Esse é apenas o caso se estiver delegando para os corredores JUnit.
Se você estiver executando com um corredor personalizado que não reconheça a @Ruleanotação, ficará realmente com a necessidade de escrever seu próprio corredor, que delega adequadamente esse corredor e o executa 10 vezes.
Observe que existem outras maneiras de resolver isso potencialmente (como o corredor de teorias), mas todas elas exigem um corredor. Infelizmente, o JUnit atualmente não suporta camadas de corredores. Esse é um corredor que liga outros corredores.