Executor de Testes Funcionais JUnit
JUnit é usado para rodar testes de unidade, mas utilizando bibliotecas como RestAssured para fazer testes utilizando requests HTTP, é possível utiliza-los para iniciar um serviço e testar a integração de todos os componentes.
A idéia seria de criar um executor de testes que irá ler annotações em métodos e classes de teste e os executaria de uma maneira eficiente/hierárquica, visto que testes funcionais muitas vezes requerem uma etapa de setup e teardown.
Exemplo:
Quero testar a compra de um produto por um cliente que tem alguma restrição e não deveria conseguir fazer a ordem de compra. Para isto preciso de ter o produto cadastrado, o cliente cadastrado, base de CEP, e eventualmente muitas outras coisas que caracterizariam um ambiente para a execução deste teste. Provavelmente este mesmo ambiente poderia ser utilizado para testar se o cliente consegue comprar outro produto com sucesso, economizando tempo de execução.
Exemplo de código:
@RunWith(XimbalaueTestRunner.class) public class TesteDeCompras { @TestEnvironment(ProdutoEClienteCadastrado.class) @TestDescription(name="Tenta comprar e não consegue", tags=new String[] { "compra", "validação" }) public void tentaComprarENaoConsegue() { ... } @TestEnvironment(ProdutoEClienteCadastrado.class) @TestDescription(name="Realiza compra com sucesso", tags=new String[] { "compra" }) public void compraComSucesso() { ... } }
Features interessantes:
- Execução via Maven ou Gradle
- Execução paralela dos testes
- UI para execução de testes, reexecução dos que falharam, coleta de dados de cobertura, tempo de execução de testes, filtro por tags ou por ambiente,..
- etc...