isaacmsl / bora-pagar

Projeto desenvolvido por alunos do IMD - UFRN para alunos da UFRN.
https://bora-pagar.onrender.com
18 stars 3 forks source link

(feat) Testes em nível de service e controller #193

Open isaacmsl opened 9 months ago

isaacmsl commented 9 months ago

Motivo

Já nos deparamos várias vezes com bugs que só acontecem quando uma requisição é feita para o sistema. Atualmente só testamos a nível de repository e isso acaba nos deixando cegos com o que acontece no controller e consequentemente no service.

Objetivo

Realizar testes de service e controller.

isaacmsl commented 9 months ago

Como exemplo de problema que só foi identificado a nível de controller, cito #183

RamonJales commented 9 months ago

Testamos isso com junit?

isaacmsl commented 9 months ago

Isso, @RamonJales . Precisa esquecer do @DataMongoTest pois esse tipo de anotação nos permite testar coisas específicas para repositórios mongo. Usando @SpringBootTest no lugar, é possível fazer o @Autowired com qualquer service. Exemplo:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTests {
    @Autowired
    UserService userService;

    @Test
    void shouldThrowIllegalArgumentoGoogleClient() {
        assertThrows(IllegalArgumentException.class, () -> userService.welcome(""));
    }
}
RamonJales commented 9 months ago

Dessa maneira estaríamos fazendo um test ent-to-end(pelas minhas pesquisas), ou seja, o test passaria pelo controller, pelo service e chegaria no repository, depois faria o mesmo percurso para retornar a resposta. O que não seria muito interessante, pois o propósito é testar o controller. Correto?

Dese modo, deveríamos usar a anotação @WebMvcTest, que nos permite testar os controllers da nossa aplicação. E ela vem com um método chamado MockMvc que nos permitiria mockar nossos objetos.

No entanto, confesso que não está muito claro para mim como usar utilizar os mocks de objeto. Não faz muito sentido esse conceito.

RamonJales commented 9 months ago

conteúdo: https://www.baeldung.com/integration-testing-in-spring