Puede alguien explicar el siguiente escenario
Código ser probado
UserTransaction.java
Junit Mockito cuando (..). ThenReturn() throws NullPointerException
@Override
public ServiceResponse<User> get(String name) {
ServiceResponse<User> response = new ServiceResponse<User>();
List<Map<String, Object>> exp = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("expression", "eq");
map.put("property", "name");
map.put("value", name);
exp.add(map);
List<User> users = userDao.getByCriteria(exp);
if (!users.isEmpty()) {
response.setResponse(users.get(0));
} else {
response.setResponse(null);
}
return response;
}
UserDao.java
public List<User> getByCriteria(List<Map<String, Object>> exp) {
DetachedCriteria criteria = DetachedCriteria.forClass(User.class);
for (Integer i=0;i<exp.size();i++){
String expression = (String) exp.get(i).get("expression");
String property = (String) exp.get(i).get("property");
if(expression.equals("eq"){
criteria.add(Restrictions.eq(property,exp.get(i).get("value")));
}
}
return hibernateTemplate.findByCriteria(criteria);
}
UserTransactionTest.java
private UserTransaction userTransactions = new UserTransaction();
private UserDao userDao = mock(UserDao.class);
@Test
public void testGet() {
User user = new User();
user.setName("Raman");
try {
when(userDao.getByCriteria(anyList())).thenReturn(user);
} catch (Exception e) {
e.printStackTrace();
}
ServiceResponse<User> response = userTransactions.get("raman");
User result = response.getResponse();
assertEquals("Raman", result.getName());
assertEquals(0, response.getErrors().size());
}
funciona bien.
Pero en lugar de "anyList()" Me pasó una lista definida por el usuario "miLista"
List<Map<String,Object>> myList = new ArrayList<Map<String,Object>>();
Map<String,Object> map = new HashMap<String,Object>();
map.put("expression","eq");
map.put("property","name");
map.put("value","raman");
myList.add(map);
when(userTransactions.getByCriteria(myList)).thenReturn(user);
Lanza NullPointerException
en la línea de assertEquals()
. ¿Por qué? ¿Qué sucede realmente si se proporciona anyList()
?
Eres no publicando suficiente código, lo que dificulta que otros puedan ver dónde estás yendo mal. Es 'cuando (userTransactions' es un error ortográfico ¿Cómo se crea' myList'? ¿Cuál es la firma de método de 'getByCriteria()'? – Brad
¿Me falta algo aquí? Sigues publicando 'cuando (userTransactions ...' y ese objeto no se ha creado. Has creado 'userTransaction' en tu código anterior pero no' userTransactions' (ten en cuenta la "s" al final). Si depuras tu código ¿Existe un objeto llamado 'userTransactions' y es un objeto burlado? – Brad
¿Puedes aclarar si está lanzando la excepción en la línea con' when', o en la línea dentro de la prueba donde 'getByCriteria' se llama realmente? Y publicar algunos más de su código - como han dicho otros, realmente no ha proporcionado suficiente información para que podamos diagnosticar lo que está mal. –