Mockito 101

testing  mockito  performance 

Necesito mockear las respuestas de servicios y repositories, para ello me planteo utilizar Mockito, y esta lectura parece contener toda la información sobre como empezar http://www.baeldung.com/injecting-mocks-in-spring

Mockito nos permite crear la respuesta que esperaríamos obtener de un servicio o de un repositorio. Para ello tan solo tenemos que declarar para cada llamada, la respuesta que esperamos obtener.

Los pasos que he seguido para comenzar a utilizar Mockito han sido

  • Añadir las dependencias al maven.
1
2
3
4
5
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.8.9</version>
</dependency>
  • Crear una clase de configuración que declara los Beans con los mocks que se interceptan en la llamada al servicio durante el test. Es posible declarar más de un Bean en esta clase, podemos poner en ella todos los Beans de los elementos mockeados. En este caso se ha optado por utilizar el perfil ‘test’ para lanzar el test.
1
2
3
4
5
6
7
8
9
@Profile("test")
@Configuration
public class NameServiceTestConfiguration {
    @Bean
    @Primary
    public NameService nameService() {
        return Mockito.mock(NameService.class);
    }
}
  • Escribir el test. En el debemos declarar lo que se espera recibir cuando realicemos la llamada. A continuación un ejemplo básico sobre el que comenzar a escribir nuestros tests.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MocksApplication.class)
public class UserServiceTest {
 
    @Autowired
    private UserService userService;
 
    @Autowired
    private NameService nameService;
 
    @Test
    public void whenUserIdIsProvided_thenRetrievedNameIsCorrect() {
        Mockito.when(nameService.getUserName("SomeId")).thenReturn("Mock user name");
        String testName = userService.getUserName("SomeId");
        Assert.assertEquals("Mock user name", testName);
    }
}

Lecturas