Mockito para Java: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é Mockito e para que serve?

\n\n

Mockito é uma poderosa biblioteca para Java, projetada para criar objetos mock (simulações) em testes unitários. Ela permite isolar o código testado de suas dependências, como bancos de dados, APIs externas, sistemas de arquivos ou outros serviços. Em vez de objetos reais, que podem ser lentos, instáveis ou exigir configuração complexa, você cria simulações com comportamento pré-definido.

\n\n

O principal objetivo do Mockito é tornar os testes unitários rápidos, previsíveis e independentes do ambiente externo. A biblioteca é amplamente utilizada no ecossistema Java (Spring, Java EE, Android) e é o padrão de facto para mocking.

\n\n

Principais recursos:

\n
    \n
  • Criação de objetos mock — simulação de qualquer classe ou interface.
  • \n
  • Definição de comportamento — configuração de valores de retorno, lançamento de exceções.
  • \n
  • Verificação de chamadas — checagem se os métodos foram chamados com parâmetros específicos e o número desejado de vezes.
  • \n
  • Spy (mocking parcial) — possibilidade de usar um objeto real, mas sobrescrever métodos individuais.
  • \n
  • Captura de argumentos (ArgumentCaptor) — extração de parâmetros passados para um método mock para validação posterior.
  • \n
\n\n

Instalação do Mockito

\n\n

Como Mockito é uma biblioteca Java, ela não é instalada via pip ou npm. Para adicioná-la ao projeto, são usados sistemas de build como Maven ou Gradle.

\n\n

Maven (pom.xml)

\n
<dependency>\n    <groupId>org.mockito</groupId>\n    <artifactId>mockito-core</artifactId>\n    <version>5.12.0</version>\n    <scope>test</scope>\n</dependency>\n\n<!-- Para uso com JUnit 5 -->\n<dependency>\n    <groupId>org.mockito</groupId>\n    <artifactId>mockito-junit-jupiter</artifactId>\n    <version>5.12.0</version>\n    <scope>test</scope>\n</dependency>
\n\n

Gradle (build.gradle)

\n
testImplementation 'org.mockito:mockito-core:5.12.0'\ntestImplementation 'org.mockito:mockito-junit-jupiter:5.12.0'
\n\n

Recomenda-se usar a versão estável mais recente disponível no momento da escrita dos testes.

\n\n

Início rápido: exemplo de código

\n\n

Vamos considerar um exemplo simples. Suponha que temos uma classe UserService, que depende de UserRepository. Queremos testar UserService sem precisar de um banco de dados.

\n\n
// Classe do repositório (dependência)\npublic interface UserRepository {\n    User findById(Long id);\n    void save(User user);\n}\n\n// Classe do serviço (testada)\npublic class UserService {\n    private final UserRepository userRepository;\n\n    public UserService(UserRepository userRepository) {\n        this.userRepository = userRepository;\n    }\n\n    public String getUserName(Long id) {\n        User user = userRepository.findById(id);\n        return user != null ? user.getName() : "Unknown";\n    }\n}\n\n// Teste usando Mockito\nimport org.junit.jupiter.api.Test;\nimport org.junit.jupiter.api.extension.ExtendWith;\nimport org.mockito.Mock;\nimport org.mockito.junit.jupiter.MockitoExtension;\n\nimport static org.mockito.Mockito.*;\nimport static org.junit.jupiter.api.Assertions.*;\n\n@ExtendWith(MockitoExtension.class)\npublic class UserServiceTest {\n\n    @Mock\n    private UserRepository userRepository;\n\n    @Test\n    public void testGetUserName() {\n        // Criando um objeto mock UserRepository (também possível via anotação @Mock)\n        // UserRepository mockRepo = mock(UserRepository.class);\n\n        // Configurando comportamento: ao chamar findById(1L), retornar um usuário\n        User mockUser = new User(1L, "Alice");\n        when(userRepository.findById(1L)).thenReturn(mockUser);\n\n                    

Recommendations