Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Retorno de IA para criação de testes unitários.

Boa tarde.
Estou com uma dúvida referente a retorno passado por duas IAs distintas, tanto o ChatGPT (versão GPT-5.1, versão gratuita), quanto o agente de IA integrado ao VSCode vinculado ao GitHub.
Apesar de seguir orientação passada em vídeo pelo instrutor Rodrigo sobre a solicitação de utilizar JUnit 5 e Mockito para os testes automatizados, tive retorno em ambas de que não precisa de Mockito porque a classe não tem dependências externas.
Minha dúvida neste caso seria necessário Mockar os testes ou se com as novas versões de IA pode ter mudanças.

Abaixo encaminho o prompt para cada uma das IAs e seus respectivos retornos.

Prompt para ChatGPT:

Boa tarde. Tenho uma aplicação em Java e preciso criar um código para teste automatizado utilizando JUnit 5 e Mockito. Pode me ajudar nesta criação? Segue abaixo o código do validador que quero realizar o teste:
(Foi copiado o código da classe ValidadorHorarioFuncionamentoClinica neste ponto como instrução para IA)

Retorno do Chat:
Segue um teste direto e funcional usando JUnit 5.
Não precisa de Mockito porque essa classe não tem dependências externas.

class ValidadorHorarioFuncionamentoClinicaTest {

    private ValidadorHorarioFuncionamentoClinica validador;

    @BeforeEach
    void setUp() {
        validador = new ValidadorHorarioFuncionamentoClinica();
    }

    @Test
    void devePermitirHorarioValido() {
        var data = LocalDateTime.of(2025, 1, 15, 10, 0); // quarta, 10h
        var dados = new DadosAgendamentoConsulta(1L, 1L, data);

        assertDoesNotThrow(() -> validador.validar(dados));
    }

    @Test
    void deveLancarExcecaoAoAgendarDomingo() {
        var data = LocalDateTime.of(2025, 1, 19, 10, 0); // domingo
        assertEquals(DayOfWeek.SUNDAY, data.getDayOfWeek());

        var dados = new DadosAgendamentoConsulta(1L, 1L, data);

        assertThrows(ValidacaoException.class, () -> validador.validar(dados));
    }

    @Test
    void deveLancarExcecaoAntesDaAbertura() {
        var data = LocalDateTime.of(2025, 1, 15, 6, 0);
        var dados = new DadosAgendamentoConsulta(1L, 1L, data);

        assertThrows(ValidacaoException.class, () -> validador.validar(dados));
    }

    @Test
    void deveLancarExcecaoDepoisDoEncerramento() {
        var data = LocalDateTime.of(2025, 1, 15, 19, 0);
        var dados = new DadosAgendamentoConsulta(1L, 1L, data);

        assertThrows(ValidacaoException.class, () -> validador.validar(dados));
    }
}

Observações rápidas

  1. Mockito não é necessário aqui porque não há repository nem dependência a ser mockada.
  2. Verifique a assinatura do seu DadosAgendamentoConsulta.

O teste acima supõe algo como:

public record DadosAgendamentoConsulta(Long idPaciente, Long idMedico, LocalDateTime data) {}

Prompt via agente de IA através do VSCode:
Obs.: Atualmente o agente de IA identifica a classe aberta onde se está realizando o prompt. Por estar de forma automática, foi selecionado a versão GPT5-mini.
Ponto de insersão de prompt no VSCode

Boa tarde.
Gostaria de realizar a criação de teste automatizado utilizando Junit5 e Mokito para esta classe, para este caso, como posso realizar?

Abaixo segue classe de teste criada pelo agente de IA no VSCode.

class ValidadorHorarioFuncionamentoClinicaTest {

    private final ValidadorHorarioFuncionamentoClinica validador = new ValidadorHorarioFuncionamentoClinica();

    @Test
    void naoDeveLancarQuandoHorarioValido() {
        var dados = new DadosAgendamentoConsulta(null, 1L, LocalDateTime.of(2026, 1, 5, 10, 0), null);
        assertDoesNotThrow(() -> validador.validar(dados));
    }

    @Test
    void deveAceitarHorarioLimiteAberturaEFechamento() {
        var inicio = new DadosAgendamentoConsulta(null, 1L, LocalDateTime.of(2026, 1, 5, 7, 0), null);
        var fim = new DadosAgendamentoConsulta(null, 1L, LocalDateTime.of(2026, 1, 5, 18, 0), null);

        assertDoesNotThrow(() -> validador.validar(inicio));
        assertDoesNotThrow(() -> validador.validar(fim));
    }

    @Test
    void deveLancarQuandoAntesDaAbertura() {
        var dados = new DadosAgendamentoConsulta(null, 1L, LocalDateTime.of(2026, 1, 5, 6, 0), null);
        assertThrows(ValidacaoException.class, () -> validador.validar(dados));
    }

    @Test
    void deveLancarQuandoDepoisDoEncerramento() {
        var dados = new DadosAgendamentoConsulta(null, 1L, LocalDateTime.of(2026, 1, 5, 19, 0), null);
        assertThrows(ValidacaoException.class, () -> validador.validar(dados));
    }

    @Test
    void deveLancarQuandoDomingo() {
        var domingo = new DadosAgendamentoConsulta(null, 1L, LocalDateTime.of(2026, 1, 4, 10, 0), null);
        assertThrows(ValidacaoException.class, () -> validador.validar(domingo));
    }
}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta
solução!

Ei, Leandro! Tudo bem?

Agradeço por compartilhar suas dúvidas aqui no fórum, pode ajudar outros(as) colegas.

1. Por que as IAs disseram que Mockito não é necessário

Na classe ValidadorHorarioFuncionamentoClinica, o foco é validar regras de horário usando:

  • LocalDateTime
  • DayOfWeek
  • Os dados simples de DadosAgendamentoConsulta (provavelmente um record ou DTO)

Ou seja, o validador:

  • Não chama repositories
  • Não chama services externos
  • Não acessa banco, fila, API externa, etc.

Nessa situação, o teste unitário direto, só com JUnit 5, já isola bem a lógica.
Por isso as duas IAs responderam algo como: “não precisa de Mockito porque essa classe não tem dependências externas”.

2. Quando usar Mockito de fato

Mockito entra em cena quando a classe depende de outras classes que você não quer executar de verdade no teste, por exemplo:

  • ConsultaRepository (acesso a banco)
  • EmailService
  • PagamentoClient
  • Qualquer outro serviço que traria efeitos colaterais ou deixaria o teste lento / frágil.

Nesse caso, você cria mocks das dependências para:

  • Verificar se foram chamados
  • Controlar o retorno das dependências
  • Isolar o teste apenas na lógica da classe em teste

Espero ter ajudado e qualquer dúvida, compartilhe no fórum.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!