JUnit5 @RunWith
1. Introdução
Neste artigo rápido, cobriremos o uso da anotação@RunWith na estrutura JUnit 5.
Na JUnit 5,the @RunWith annotation has been replaced by the more powerful @ExtendWith annotation.
No entanto, a anotação@RunWith ainda pode ser usada no JUnit5 para fins de compatibilidade com versões anteriores.
2. Executando testes com um executor baseado em JUnit4
Podemos executar testes JUnit5 com qualquer outro ambiente JUnit mais antigo usando a anotação@RunWith.
Vejamos um exemplo de execução desses testes em uma versão do Eclipse que suporta apenas JUnit4.
Primeiro, vamos criar a classe que vamos testar:
public class Greetings {
public static String sayHello() {
return "Hello";
}
}
A seguir, vamos criar este teste JUnit5 simples:
public class GreetingsTest {
@Test
void whenCallingSayHello_thenReturnHello() {
assertTrue("Hello".equals(Greetings.sayHello()));
}
}
Finalmente, vamos adicionar esta anotação para poder executar o teste:
@RunWith(JUnitPlatform.class)
public class GreetingsTest {
// ...
}
A classeJUnitPlatform é um executor baseado em JUnit4 que nos permite executar testes JUnit4 na plataforma JUnit.
Vamoskeep in mind that JUnit4 does not support all the features of the new JUnit Platform, so this runner has a limited functionality.
Se verificarmos o resultado do teste no Eclipse, podemos ver que um corredor JUnit4 foi usado:
3. Executando testes em um ambiente JUnit5
Vamos agora executar o mesmo teste em uma versão do Eclipse compatível com JUnit5. Nesse caso, não precisamos mais da anotação@RunWith e podemos escrever o teste sem um runner:
public class GreetingsTest {
@Test
void whenCallingSayHello_thenReturnHello() {
assertTrue("Hello".equals(Greetings.sayHello()));
}
}
O resultado do teste mostra que agora estamos usando o executor JUnit5:
4. Migrando de um Runner baseado em JUnit4
Agora vamos migrar um teste que usa um runner baseado em JUnit4 para JUnit5.
Vamos usar um teste de Spring como exemplo:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
// ...
}
Se quisermos migrar este teste para JUnit5, precisamos substituir a anotação@RunWith pela nova@ExtendWith:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
// ...
}
A classeSpringExtension é fornecida pelo Spring 5 e integra o Spring TestContext Framework ao JUnit 5. A anotação@ExtendWith aceita qualquer classe que implemente a interfaceExtension.
5. Conclusão
Neste breve artigo, cobrimos o uso da anotação@RunWith do JUnit 4 no framework JUnit5.
O código-fonte completo dos exemplos está disponívelover on GitHub.