Parte 2: testando o backend do desafio Magalu
Suites, contratos e regressao no servidor.
Resposta direta
Suites, contratos e regressao no servidor — o núcleo do material original é direto: Bom pessoal, esse vídeo aqui é a continuação, é a parte 2 do desafio da Magalu que diz respeito aos testes do nosso servidor back-end que nós desenvolvemos. Então, se você não viu ainda a parte 1, eu vou deixar o card aqui em cima, provavelmente desse vídeo, que vai te direcionar para a parte 1, que é a resolução deste desafio aqui. Beleza? Deixa eu trocar a câmera para ficar mais um cantinho. Porque qual que é a jogada? Só para a gente relembrar, né?
O que o material mostra de fato
No material original, o ponto de partida não é teoria abstrata: é uma sequência concreta ligada a «Testes de backend no desafio Magalu: parte 2 pratica». Esse foi o desafio, foi o que nós desenvolvemos no vídeo 1. Agora, se a gente for olhar as observações e orientações gerais, nós temos aqui, faça testes unitários, foque em uma suite de testes unitários.
Detalhe do transcript que não pode virar genérico: testes bem organizadas como esse desafio eu classifiquei como um desafio de estágio porque ele foi relativamente simples para a gente desenvolver imagina foram três endpoints né eu quis separar e deixar a partir de testes se eu fosse um estagiário como é que eu faria depois eu posso até fazer um outro vídeo mostrando alguns testes automatizados bem legais aqui usando outras bibliotecas Mas vamos lá, então como é que eu faria os testes aqui da nossa solução? Deixa eu abrir o IntelliJ aqui.
Contexto e motivação
O contexto importa porque a mesma ideia muda de preço conforme ferramenta, fase do produto ou disciplina pessoal. O IntelliJ já está com o desafio feito, a codificação do desafio. Então só para dar uma pincelada e o vídeo não ficar tão longo, nós temos a arquitetura em camadas, então foram feitos os models, que são os entities, um model só de agendamento. Então isso aqui é uma tabela que representa no nosso banco de dados. Tem a parte de repository para fazer a persistência de dados com JPA. Tem também a parte de services que tem a regra de negócio da nossa aplicação.
Detalhe do transcript que não pode virar genérico: Então quando eu vou agendar eu recebo um DTO para trafegar apenas o necessário entre o nosso client-side e o server-side. transformo isso via builder ahn para o meu objeto, para a minha entidade de agendamento e faço a gravação no banco de dados. Então, eu usei uma anotação diferente para resolver esse desafio, que é o builder. Então, se vocês entrarem dentro aqui do agendamento, vocês vão ver que eu tenho uma anotação, que é o arroba builder. Isso aqui vai possibilitar eu não ficar dando sets.
Como funciona na prática
Em vez de colecionar slogans, trate o conteúdo como checklist operacional: o que fazer nesta semana, o que medir, o que descartar. Eu simplesmente crio um builder e uso o ponto atributo e faço a associação com o meu DTO. Isso aqui é uma prática que muitos gostam de fazer. Eu prefiro, a minha preferência é usar assets, mas eu quis trazer algo diferente também. Então, nós temos a regra de negócio, que vai fazer o quê? Vai agendar, vai buscar por ID e vai remover. E vai ter um toResponse aqui, poderia ser um mapper para fazer isso. Por que tem a camada service? É justamente a regra de negócio.
Detalhe do transcript que não pode virar genérico: Então, por exemplo, estou verificando se o ID...
Erros comuns e armadilhas
Onde isso quebra na prática: quem tenta atalho sem o mecanismo descrito no transcript perde consistência rápido. que eu recebi realmente existe no banco de dados se ele não existir eu tô dando uma mensagem um trouxe né uma excepção de em que te not found então o remover eu vou remover apenas um agendamento não encontrado então para que essa lógica que uma regra de negócio não fique exposto numa camada aleatória tipo controller eu coloco tudo dentro do service e daí aqui eu tenho a camada de que vai ser o nosso zap APIs de comunicação, então barra API, barra agendamentos, vai ter a rota de post, para eu agendar a rota de get mapping para eu buscar, a nota de remover também, para remover um agendamento, então ficou a rota de delete mapping, daí ficou bem simples, olha só como o controller fica, ele fica sem regras de negócio nenhuma, fica com duas linhas cada método e fica bem chutinho, agora para fazer os casos de MVC teste pessoal que que eu posso fazer eu posso simplesmente usar a o MVC testes usando o mock tá então por exemplo aqui eu já tenho um pacote de testes dentro do meu do meu projeto eu posso criar uma classe qualquer aqui que eu vou chamar de agendamento controller test só um exemplo né vou fazer algo que me veio aqui na mente agora antes de gravar esse vídeo então aqui eu vou fazer o uma anotação que eu vou usar web mvc test essa aqui é a anotação que vai garantir testes de unidade na minha classe de controller, no meu controller sem a necessidade de usar banco de dados então essa anotação ela vai configurar o Spring para testar apenas a nossa camada de controller e a nossa camada de controller ela fica dentro de agendamento controller.class, então eu uso eu inicio a minha classe com essa anotação aqui dizendo qual controller eu quero que seja testado. Perfeito?
Detalhe do transcript que não pode virar genérico: Então, eu vou falar, tipo, pausado, resumido aqui, para que não fique dúvidas nenhuma. O próximo, eu vou criar um atributo aqui, que vai ser o mockMVC, que eu vou chamar de mockMVC, e eu vou usar uma anotação aqui, que é o autoWired, para usar a injeção de dependência, que seria evitar de eu criar um construtor, e isso... Spring vai instanciar isso para mim. E o que é o mockmvc, pessoal? O mockmvc, ele permite simular requisições. Então, eu vou colocar até em comentário. Permite simular requisições HTTP.
Checklist de aplicação
Na prática, isso vira rotina: escolha um experimento curto, documente antes/depois e só então escale. Então, ele vai fazer para mim um post, o get e o meu delete. na minha API, tá? Então, é o mockmvc que permite a gente fazer essas simulações, perfeito? O que mais que eu vou fazer aqui? Eu vou usar uma variável do tipo objectMapper, tá? Que o que ela vai ter aqui também? Ela vai ser, eu vou usar o autoArt, porque é ela que vai fazer a conversão dos objetos Java para JSON e vice-versa.
Detalhe do transcript que não pode virar genérico: eu vou colocar um comentário aqui também então é object map que ele faz ele converte objetos em json e ver meu Deus ele ele tá escutando que eu tô falando aí ele tá escutando copilot pessoal que me pergunta direto com essa extensão que faz o alto complete gente eu uso aqui ó o jet jet AI, tá? Ela é uma extensão paga, mas como eu faço parte do grupo de parceiros da JetBrains, eu tenho ela. Gratuito, na minha licença vitalícia aqui.
Information gain
Ganho específico deste material (9247): preserve a especificidade de «Testes de backend no desafio Magalu: parte 2 pratica» — números, ferramentas e narrativa do source, sem genificar.
Próximo passo concreto
Feche o ciclo com um próximo passo observável — sem isso, o artigo vira entretenimento e some na timeline. Se você quer usar ela, você pode testar ela por 30 dias. E depois você pode ver se você quer adquirir o valor ali, que eu não me lembro qual é. Mas você tem um cupom de desconto que é o MATHEUSLFC. O link vai estar na descrição deste vídeo. Compensa. Vocês viram, ela lê pensamentos. Mas se por acaso, Matheus, eu não quero usar esse aqui, tem uma outra? Sim, tem o GitHub Copilot.
Detalhe do transcript que não pode virar genérico: Tu pode instalar a extensão tanto no VS Code quanto no IntelliJ, que ele vai fazer quase a mesma coisa para você. Beleza? Depois eu vou criar um vídeo, se vocês... Escrever aí no comentário, eu quero vídeo, eu mostro todas as extensões que eu utilizo, que facilitam muito a minha vida, só que não está instalado no meu Macbook aqui para o YouTube, está instalado no meu computador pessoal do escritório, na verdade, da empresa.
Perguntas frequentes
Qual mecanismo de «Contexto e motivação» cabe no fluxo que você já toca?
Resposta direta do corpo: O contexto importa porque a mesma ideia muda de preço conforme ferramenta, fase do produto ou disciplina pessoal. O IntelliJ já está com o desafio feito, a codificação do desafio. Então só para dar uma pincelada e o vídeo não ficar tão longo, nós temos a.
Como extrair «Como funciona na prática» sem copiar o artigo inteiro?
Extraia só o mecanismo de «Como funciona na prática»: Em vez de colecionar slogans, trate o conteúdo como checklist operacional: o que fazer nesta semana, o que medir, o que descartar. Eu simplesmente crio um builder e uso o ponto atributo e faço a associação com o meu DTO. Isso aqui é uma prática que muitos.
O que «Erros comuns e armadilhas» muda no próximo ciclo de trabalho?
Operação curta: Onde isso quebra na prática: quem tenta atalho sem o mecanismo descrito no transcript perde consistência rápido. que eu recebi realmente existe no banco de dados se ele não existir eu tô dando uma mensagem um trouxe né uma excepção de em que te not found então. Revise com evidência, não com feeling.
Quando «Checklist de aplicação» deixa de valer o esforço desta sprint?
Do texto: Na prática, isso vira rotina: escolha um experimento curto, documente antes/depois e só então escale. Então, ele vai fazer para mim um post, o get e o meu delete. na minha API, tá? Então, é o mockmvc que permite a gente fazer essas simulações, perfeito? O que.