¿Mock a EntiityManager es posible con Spring?
Hola buenas tardes a todos.
Hay una duda que tengo y es referente a la forma en que debo inyectar EntityManager dentro de una clase Test, para ello estoy utilizando JUnit y Mockito.
por ejemplo:
ClaseRepositoryImpl => Es la clase que quiero testear
EntityManager => Es lo que necesito falsear
@InjectMocks
public ClaseRepositoryImpl cr;
@Mock
public EntityManager em;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void getCatalogoEjemploTest() {
List<Ejemplo> listado = this.getCatalogoEjemplo(); //Tengo un método private que me devuelve una Lista de Objetos de tipo Ejemplo
String nameStoreProcedure = "SP_GET_CAT_EJEMPLO";
Query query = entityManager.createStoredProcedureQuery(nameStoreProcedure, Ejemplo.class);
Mockito.when(query.getResultList()).thenReturn(listado);
}
}
El problema está en que cuando le paso la herramienta debug con Eclipse, me doy cuenta que en la línea query.getResultList() me indica lo siguiente: query = null, ¿Cuál es forma correcta de falsear EntityManager?, Cabe señalar que estoy usando JPA. Espero que alguien haya tenido el mismo problema para poder orientarme, muchas gracias.
- Lia's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Sería así
public class ClaseRepositoryImplTest{
@InjectMocks
public ClaseRepositoryImpl cr;
@Mock
public EntityManager em;
@Test
public void getCatalogoEjemploTest() {
final List<Ejemplo> listado = this.getCatalogoEjemplo();
final String nameStoreProcedure = "SP_GET_CAT_EJEMPLO";
Mockito.when(query.getResultList()).thenReturn(listado);
Query query = entityManager.createStoredProcedureQuery(nameStoreProcedure, Ejemplo.class);
Assert.assertNotNull(query);
Mockito.verify(query).getResultList());
}
}
El
Mockito.when ...
debe ir antes de que ejecutes el método que deseas probar.