Teste a lógica de domínio com JUnit puro e sem contexto Spring, já que injeção por construtor torna isso trivial. Teste a persistência contra um banco real num container em vez de um substituto em memória, porque dialetos diferem e migrações também precisam de teste. Use test slices em vez de subir a aplicação inteira para testes de controller ou de repositório, e faça stub da API externa na camada HTTP para que seu código de cliente, retries e parsing rodem de verdade.
Por que os entrevistadores perguntam isso
O entrevistador quer saber se seus testes pegam regressões ou só exercitam mocks. Preferir um banco real num container ao invés de um em memória, usar slices em vez de contexto completo por velocidade, e mockar na fronteira HTTP em vez de mockar seu próprio repositório são todos sinais de uma suíte em que as pessoas confiam. O tempo de execução também importa, já que uma suíte lenta acaba pulada.
Como estruturar sua resposta
- Separe as camadas e case um estilo de teste com cada uma.
- Use um banco real containerizado e rode as migrações no teste.
- Faça stub do HTTP externo em vez de mockar seu próprio cliente.
- Mantenha a suíte rápida e isolada para continuar confiável.
Exemplo de resposta
A maior parte da lógica ganha testes unitários puros sem framework nenhum: injeção por construtor significa que eu consigo instanciar a classe com dublês de teste para os colaboradores e ela roda em milissegundos. Para persistência eu uso um banco real da mesma engine e versão num container, com as migrações aplicadas como parte do setup do teste, então a própria migração é verificada a cada rodada. Um banco em memória é mais rápido mas mente sobre dialetos e constraints, e eu já subi uma query que funcionava nos testes e falhou em produção por causa disso. Para a camada web eu uso uma slice que carrega só o controller e a serialização, não a aplicação inteira, porque subir tudo para todo teste é o que faz suítes levarem vinte minutos. A API externa é stubada no nível HTTP com um mock server, então minha configuração de cliente, timeouts, lógica de retry e mapeamento JSON são exercitados de verdade. Eu também reaproveito containers ao longo da execução e faço rollback de cada teste numa transação, o que mantém as coisas isoladas e paralelizáveis.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Por que não usar um banco em memória por velocidade?
- Como você testa o comportamento de retry e timeout do seu cliente?
- O que você assegura para pegar uma query N mais um num teste?
Mais perguntas para Desenvolvedor Java
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas