Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Quais os problemas de usar @Autowired quando rodamos testes unitários?

Galera, estou usando o Junit Jupiter nos testes unitários com Spring Boot. (versão 2.6.10) Diferente aqui do treinamento, estou em um teste de controller por exemplo usando a anotação @SpringBootTest ao invés da @RunWtih... Já tinha visto em vários lugares que não era uma boa prática usar @Autowired pra fazer injeção de dependências com Spring porque quebraria os testes, e que eu teria que fazer a injeção pelo construtor. Porém, fiz alguns testes aqui e tudo rodou normalmente, os testes passaram e reprovaram onde eu queria que acontecesse mesmo. Estou tentando simular o problema da injeção com @Autowired mas não estou conseguindo, o que houve? Mudou alguma coisa e agora o Junit está aceitando essa injeção do Spring?

Anotações da classe de teste do controlle, nela estou fazendo injeção com @Autowired da MockMvc

@ActiveProfiles("dev")
@SpringBootTest
@AutoConfigureMockMvc

Anotações da classe de teste do repository, nela estou fazendo injeção com @Autowired da ClienteRepository

@ActiveProfiles("dev")
@DataJpaTest(showSql = true) 
@AutoConfigureTestDatabase(replace=AutoConfigureTestDatabase.Replace.NONE)

Eu quero justamente simular o erro pra poder arrumar quando tiver esse problema. Valeu!

2 respostas
solução!

Oi Ailton,

Esse problema seria para testes sem utilizar o Spring Boot. Como você está testando um controller, utilizando as anotações do Spring na classe de teste, então não tem problemas.

Seria somente no caso de testar com JUnit puro, sem utilizar nenhuma anotação do Spring, que o problema aconteceria, pois ao rodar os testes os @Autowired estariam nulos, causando então NullPointerException.

Bons estudos!

Rodrigo você é o cara! Um dos meus instrutores preferidos, muito conhecimento, excelente didática e interage rapidamente com a galera. Todos deveriam fazer isso, tem instrutor que nunca respondeu uma dúvida. Obrigado e continue assim!