Parabéns 🎉 to curtindo bastante os vídeos de vocês 🤘🏻 also, ótima explicação da diferença entre teste unitário e de integração e da importância dos mocks
Parabéns William, ótimo conteúdo. Explicação top; Comecei a fazer o curso Começando com Web Services RESTful e Spring, vou tentar acrescentar testes unitarios nos Controllers do curso . Muito Obrigado .
Faltou mostrar o import do Spring Mock MVC nas dependencias do Maven, e outro ponto que peguei um projeto que estou fazendo e tinha mais de um controller e mesmo usando o standaloneSetup na hora de compilar ele pedia as dependencias de outro controller. Para quem tiver esse basta add o classe do controller que vc quer isolar. No meu caso ficou assim. @WebMvcTest(CozinhaController.class) public class CozinhaControllerTest Qualquer duvida github.com/asilvadesa/algafood/blob/main/src/test/java/com/algaworks/algafood/api/controller/CozinhaControllerTest.java
@@Chryst1anFRz Opa, descobri sim! Vou compartilhar com você o link dos testes de um projeto meu dai você da uma olhada. github.com/Matheus-Barkert/Desafio-Pautas/tree/master/src/test/java/br/com/compasso/DesafioPauta/controller
Quem quiser a versão "virgem" do projeto pra codar junto ao William, só clonar o repo: github.com/Nel-Medeiros/algaworks-videoaula-spring-mockController-start
Explicação excelente! A algaworks tem algum curso que aborda testes unitários com Spring? Pesquisei e não encontrei. Tenho bastante interesse nesse tema. Bem que o William poderia ser o instrutor desse curso se não tiver!
Olá Rafael! Exatamente o mesmo processo, na verdade para qualquer componente, nós que indicamos o comportamento do método quando receber determinados parâmetros.
@@algaworks Nesse caso mesmo assim, para eu conseguir subir o projeto para testes o servidor do banco precisa estar ligado né? Fui fazer com ele desligado e deu um erro quando foi subir o projeto.
Cara muito bom o seu vídeo, entende muito do assunto mas em um dos meus teste deu o seguinte erro faz ideia do que pode ser? java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
That's strange... my environment doesn't found that class: Rest AssuredMockMvc. i have tried to import it... idk how I can import io.restassured.module.mockmvc.RestAssuredMockMvc; gradle
you must import on your gradle file // mvnrepository.com/artifact/io.rest-assured/rest-assured testCompile group: 'io.rest-assured', name: 'rest-assured', version: '4.3.1'
Muito bom! Apesar de meu arquivo pom.xml já está com o lombok adicionado. Infelizmente o lombok aqui não gerou nenhum método. Teria algum procedimento prévio a ser realizado?
@@vitorsantosdasilva6538 Ah, realmente é necessário instalar também o plugin, a dependência do Maven vai adicionar a funcionalidade à sua aplicação. Mas para a IDE reconhecer esses códigos gerados durante o build é necessário o plugin. Você pode baixar o plugin direto do site oficial, é bem simples de instalar: projectlombok.org/download
Tenho problemas com testes unitarios quando se trata de fazer login usando MockMVC ou JUnit mesmo para logar em um redis (sem possuir redis local). Não tenho como usar o Redis localmente, mas preciso conseguir testar os metodos de login e os metodos q necessitam de authenticação (Bearer) para saber q tudo esta funcionando corretamente. Usamos MongoDB, JUnit 4 e MockMVC para tentar fazer os testes. Pode me auxiliar?
Aula muito boa, muito bem explicado e direto ao ponto, sugestão, diminuir um pouco o volume da voz na gravação, da pra ouvir tu engolindo saliva e isso não é legal.
Excelente Will. Parabéns! Se puder dá uma dica. Quando vou rodar o teste, encontro um problema com o construtor na classe filme: Quando vou debugar acho: java: constructor Filme in class br.com.algaworks.filmes.model.Filme cannot be applied to given types; required: no arguments found: java.lang.Long,java.lang.String,java.lang.String reason: actual and formal argument lists differ in length. Diz que o problema está na linha 15 onde tem a chaves fechando a classe. LIsta de argumentos diferem em tamanho?
Insira o pacote de testes do Spring Security no projeto. Com ele, vem as annotations @WithUserDetails, @WithUser que injetam um usuário autenticado nos testes. Temos uma aula sobre isso no nosso canal.
Não entendi por que os nomes dos metodos foram separados por underline se no Java o padrão é CamelCase e por que a importação de todos ? Isso não carrega informação desnecessária?
No caso de teste foge um pouco a nomeação de métodos, não há problemas usar outro padrão já que este método não é usado fora da própria classe e sim só para a escrita do teste. Com relação a importação vai carregar todos os métodos statics, mas como se usa muita coisa nos testes não é tão problema assim. A legibilidade do teste fica acima do desempenho, principalmente porque o teste só roda na compilação.
@@professordaniloalmeida muito boa explicação, é exatamente isso. O custo de se fazer esse import não é tão caro. E como foi muito bem colocado por você, os testes unitários só rodam na sua própria fase, o que não impacta no projeto como um todo.
Excelente material!!! Eu estou encarando um erro, gostaria de saber se alguém teve algo parecido. "java.lang.IllegalStateException: delegate cannot be null. Ensure a Bean with the name springSecurityFilterChain implementing Filter is present or inject the Filter to be used."
Fala mergulhadora! Você provavelmente tem o Spring Security configurado no projeto, sendo assim, o mais fácil é realizar um teste com todos os componentes do Spring carregados. Para isso, utiliza a Annotation @SpringBootTest ao invés de @WebMvcTest.
O diferencial da algaworks é essa riqueza de detalhes, você sai entendendo o por que de cada coisa. Muito bom.
Muito bom, depois de um dia inteiro tentando aprender a forma correta de fazer testes no Spring consegui com esse vídeo, valeu!
Achei muito didática essa aula !
Parabéns 🎉 to curtindo bastante os vídeos de vocês 🤘🏻 also, ótima explicação da diferença entre teste unitário e de integração e da importância dos mocks
Valeu demais, Estevão! Fico feliz que os vídeos estejam agregando valor pra vocês!
Obrigado pelo conteúdo!
Parabéns e obrigado!
Excelente explicação, de fácil entendimento. Muito bom para quem está começando no mundo de API como eu estou. Obrigado!
Muito bom esse exemplo, Will! Parabéns pela didática e forma clara de expor os seus conhecimentos!
Poxa, muito obrigado mesmo. Ficamos felizes em saber que tenha gostado :)
Otima explicação muito obrigado !!
Excelente explicação!
Excelente Didática, muito bem expllicado. Gostaria de mais aulas sobre o uso do DDD nos testes Unitários
Parabéns William, ótimo conteúdo. Explicação top;
Comecei a fazer o curso Começando com Web Services RESTful e Spring, vou tentar acrescentar testes unitarios nos Controllers do curso .
Muito Obrigado .
Poxa, que massa Danilo!
Pode ter certeza que vai agregar muito valor ao seu projeto!
Parabéns Willian pelo conteúdo e pela excelente explicação.
Opa, muito obrigado Anderson!
top demais... obrigado por compartilhar.
Ficou show a explicação
Aula fantástica! Só tenho a agradecer!
Ótima aula!
Sensacional.... valeu!!
Poxa, valeu mesmo Luiz!
Faltou mostrar o import do Spring Mock MVC nas dependencias do Maven, e outro ponto que peguei um projeto que estou fazendo e tinha mais de um controller e mesmo usando o standaloneSetup na hora de compilar ele pedia as dependencias de outro controller.
Para quem tiver esse basta add o classe do controller que vc quer isolar.
No meu caso ficou assim.
@WebMvcTest(CozinhaController.class)
public class CozinhaControllerTest
Qualquer duvida
github.com/asilvadesa/algafood/blob/main/src/test/java/com/algaworks/algafood/api/controller/CozinhaControllerTest.java
Valeu irmão, o meu tava dando o mesmo problema
Topa cara, muito bem explicado!!
Ótima aula.
Mas minha dúvida é em como efetuar um teste com um objeto completo. Pode parecer bobo, mas é uma dpuvida que eu tenho.
Olá Erivelton, poderia ser mais específico? O que seria esses objetos completos?
Parabens, demorei pra encontrar algo que me ajudasse a testar o controller. Poderia fazer um video sobre como testar com o POST?
Olá Matheus! Poxa, muito obrigado!
Pode deixar que já anotei sua sugestão aqui para os próximos vídeos! :D
Descobriu como?
@@Chryst1anFRz Opa, descobri sim! Vou compartilhar com você o link dos testes de um projeto meu dai você da uma olhada.
github.com/Matheus-Barkert/Desafio-Pautas/tree/master/src/test/java/br/com/compasso/DesafioPauta/controller
@@matheusbarkert6734 Muito obrigado!
Vc tem algum exemplo de teste onde valida/confere paginação(pageable) ?
Quem quiser a versão "virgem" do projeto pra codar junto ao William, só clonar o repo: github.com/Nel-Medeiros/algaworks-videoaula-spring-mockController-start
Explicação excelente! A algaworks tem algum curso que aborda testes unitários com Spring? Pesquisei e não encontrei. Tenho bastante interesse nesse tema. Bem que o William poderia ser o instrutor desse curso se não tiver!
Eu só faço teste unitário em Controllers! Assim consigo testar o cenário completo de ponta a ponta!
Achei interessante, como faço para aprender mais?!
Grande Willian... como eu faço quando tenho Autenticação com JWT?
Muito bom !!!
Quando preciso mockar um repositorio, segue a mesma linha , de como foi mockada a service ???
Olá Rafael!
Exatamente o mesmo processo, na verdade para qualquer componente, nós que indicamos o comportamento do método quando receber determinados parâmetros.
@@algaworks Nesse caso mesmo assim, para eu conseguir subir o projeto para testes o servidor do banco precisa estar ligado né? Fui fazer com ele desligado e deu um erro quando foi subir o projeto.
Cara muito bom o seu vídeo, entende muito do assunto mas em um dos meus teste deu o seguinte erro faz ideia do que pode ser? java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
Onde acho material sobre como fazer Post?
That's strange... my environment doesn't found that class: Rest AssuredMockMvc. i have tried to import it...
idk how I can import io.restassured.module.mockmvc.RestAssuredMockMvc; gradle
you must import on your gradle file // mvnrepository.com/artifact/io.rest-assured/rest-assured
testCompile group: 'io.rest-assured', name: 'rest-assured', version: '4.3.1'
Muito bom! Apesar de meu arquivo pom.xml já está com o lombok adicionado. Infelizmente o lombok aqui não gerou nenhum método. Teria algum procedimento prévio a ser realizado?
Opa, valeu mesmo Vitor!
Você chegou a fazer a instalação do plugin do Lombok na sua IDE?
@@algaworks Hummm, não fiz a instalação do plugin, achei q fosse baixar automaticamente via maven.
@@vitorsantosdasilva6538 Ah, realmente é necessário instalar também o plugin, a dependência do Maven vai adicionar a funcionalidade à sua aplicação.
Mas para a IDE reconhecer esses códigos gerados durante o build é necessário o plugin.
Você pode baixar o plugin direto do site oficial, é bem simples de instalar: projectlombok.org/download
Tenho problemas com testes unitarios quando se trata de fazer login usando MockMVC ou JUnit mesmo para logar em um redis (sem possuir redis local). Não tenho como usar o Redis localmente, mas preciso conseguir testar os metodos de login e os metodos q necessitam de authenticação (Bearer) para saber q tudo esta funcionando corretamente. Usamos MongoDB, JUnit 4 e MockMVC para tentar fazer os testes. Pode me auxiliar?
show
Aula muito boa, muito bem explicado e direto ao ponto, sugestão, diminuir um pouco o volume da voz na gravação, da pra ouvir tu engolindo saliva e isso não é legal.
Qual a diferença do restassuredMockMvc pro mockMvc?
Excelente Will. Parabéns!
Se puder dá uma dica. Quando vou rodar o teste, encontro um problema com o construtor na classe filme:
Quando vou debugar acho:
java: constructor Filme in class br.com.algaworks.filmes.model.Filme cannot be applied to given types;
required: no arguments
found: java.lang.Long,java.lang.String,java.lang.String
reason: actual and formal argument lists differ in length.
Diz que o problema está na linha 15 onde tem a chaves fechando a classe.
LIsta de argumentos diferem em tamanho?
um ano após, achou essa resposta? to com esse problema.
o quanto um programador java junior deve saber testes para entrar no mercado?
só mais o unitário, pois geralmente tem uma área só pra profissionais de testes
Se a controller tiver autenticação, como faço para resolver?
Insira o pacote de testes do Spring Security no projeto.
Com ele, vem as annotations @WithUserDetails, @WithUser que injetam um usuário autenticado nos testes.
Temos uma aula sobre isso no nosso canal.
@algaworks th-cam.com/video/Gdn3jJLQP4s/w-d-xo.html
Não entendi por que os nomes dos metodos foram separados por underline se no Java o padrão é CamelCase e por que a importação de todos ? Isso não carrega informação desnecessária?
No caso de teste foge um pouco a nomeação de métodos, não há problemas usar outro padrão já que este método não é usado fora da própria classe e sim só para a escrita do teste. Com relação a importação vai carregar todos os métodos statics, mas como se usa muita coisa nos testes não é tão problema assim. A legibilidade do teste fica acima do desempenho, principalmente porque o teste só roda na compilação.
@@professordaniloalmeida muito boa explicação, é exatamente isso.
O custo de se fazer esse import não é tão caro. E como foi muito bem colocado por você, os testes unitários só rodam na sua própria fase, o que não impacta no projeto como um todo.
Por qual motivo ao lançar uma exceção fico obtendo 500 ao invés de 404 ao buscar por um item não existem? Alguma ideia?
Os códigos de status 500-599 representam erro no servidor. Tenta no bloco catch lançar um Response Body com o status code desejado.
17:00
Faltou o teste passando o body de um post
english me bana de bhai :)
Excelente material!!!
Eu estou encarando um erro, gostaria de saber se alguém teve algo parecido.
"java.lang.IllegalStateException: delegate cannot be null. Ensure a Bean with the name springSecurityFilterChain implementing Filter is present or inject the Filter to be used."
Fala mergulhadora!
Você provavelmente tem o Spring Security configurado no projeto, sendo assim, o mais fácil é realizar um teste com todos os componentes do Spring carregados.
Para isso, utiliza a Annotation @SpringBootTest ao invés de @WebMvcTest.