O que é Mockito e para que serve?
\n\nMockito é 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\nO 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\nPrincipais 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
Instalação do Mockito
\n\nComo 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\nMaven (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\nGradle (build.gradle)
\ntestImplementation 'org.mockito:mockito-core:5.12.0'\ntestImplementation 'org.mockito:mockito-junit-jupiter:5.12.0'\n\nRecomenda-se usar a versão estável mais recente disponível no momento da escrita dos testes.
\n\nInício rápido: exemplo de código
\n\nVamos considerar um exemplo simples. Suponha que temos uma classe UserService, que depende de UserRepository. Queremos testar UserService sem precisar de um banco de dados.
// 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 Também na biblioteca
Verificações de tipo condicional para TypeScript: guia completo com exemplos
Cache em TypeScript: Redis, node-cache e outras ferramentas
Guia completo de Elasticsearch .NET para C# com exemplos
cobra/pflag para Go: guia completo com exemplos práticos
Symfony/Validator para PHP: guia completo com exemplos práticos