Testando Web Service em um Profile Específico

Estou desenvolvendo um web service RESTFul usando o Spring Boot e gostaria de saber como executar os testes unitários com requisições direcionadas ao web services sem que eu precise antes levantar o servidor manualmente. Gostaria que os testes já levantassem o servidor automaticamente. Além disso, gostaria que a aplicação usasse um profile específico chamado test com as configurações em application-test.properties que contem o endereço de um banco local e uma porta específica. Isso é possível?

É sim. Primeiramente, vamos pensar em levantar os seus serviços automaticamente. Para isso, usaremos duas annotations, uma informando o “executor” do Spring, que é @RunWith(SpringRunner.class), e outra informando que nossa porta é definida pelo arquivo de configuração e não randômica,além de informar nossa class com o método main que publica o web service, que é @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, classes = RestfulApplication.class). Então, supondo que vamos testar o resource pessoa do seu web service RESTFul:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
        classes = RestfulApplication.class)
public class PessoaResourceTest {

//...

}

Mas isso não soluciona tudo. As configurações que serão usadas para lançar o serviço serão a default, no arquivo application.properties e o desejado é o profile test. Para isso usaremos a tag @ActiveProfiles("test"):

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
            classes = RestfulApplication.class)
    @ActiveProfiles("test")
    public class PessoaResourceTest {

    //...

    }

Agora o serviço será lançado automaticamente usando o profile test antes dos testes serem executados.

 

Deixe um comentário