Mockito para Java: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Mockito y para qué sirve?

\n\n

Mockito es una potente biblioteca para Java, diseñada para crear objetos mock (simulaciones) en pruebas unitarias. Permite aislar el código bajo prueba de sus dependencias, como bases de datos, API externas, sistemas de archivos u otros servicios. En lugar de objetos reales, que pueden ser lentos, inestables o requerir una configuración compleja, se crea una imitación de ellos con un comportamiento predefinido.

\n\n

El objetivo principal de Mockito es hacer que las pruebas unitarias sean rápidas, predecibles e independientes del entorno externo. La biblioteca se utiliza ampliamente en el ecosistema Java (Spring, Java EE, Android) y es el estándar de facto para la simulación (mocking).

\n\n

Funcionalidades clave:

\n
    \n
  • Creación de objetos mock — simulación de cualquier clase o interfaz.
  • \n
  • Definición de comportamiento — configuración de valores de retorno, lanzamiento de excepciones.
  • \n
  • Verificación de llamadas — comprobación de que los métodos se llamaron con parámetros específicos y el número de veces deseado.
  • \n
  • Spy (simulación parcial) — posibilidad de usar un objeto real, pero sobrescribir métodos individuales.
  • \n
  • Captura de argumentos (ArgumentCaptor) — extracción de los parámetros pasados a un método mock para su posterior verificación.
  • \n
\n\n

Instalación de Mockito

\n\n

Dado que Mockito es una biblioteca de Java, no se instala a través de pip o npm. Para agregarla a un proyecto se utilizan los sistemas de compilación Maven o 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 usar con 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

Se recomienda utilizar la última versión estable, vigente al momento de escribir las pruebas.

\n\n

Inicio rápido: ejemplo de código

\n\n

Consideremos un ejemplo sencillo. Supongamos que tenemos una clase UserService que depende de UserRepository. Queremos probar UserService sin levantar una base de datos.

\n\n
// Clase del repositorio (dependencia)\npublic interface UserRepository {\n    User findById(Long id);\n    void save(User user);\n}\n\n// Clase del servicio (bajo prueba)\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// Prueba 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        // Creamos un objeto mock de UserRepository (también se puede usar la anotación @Mock)\n        // UserRepository mockRepo = mock(UserRepository.class);\n\n        // Configuramos el comportamiento: al llamar a findById(1L) devolver un usuario\n        User mockUser = new User(1L, "Alice");\n        when(userRepository.findById(1L)).thenReturn(mockUser);\n\n                    

Recommendations