Czy ktoś może wyjaśnić mi Poniższy scenariusz
kod do testowania
UserTransaction.java
Junit Mockito kiedy (..). ThenReturn() rzuca 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());
}
działa dobrze.
Ale zamiast "anyList()" minąłem listy zdefiniowane przez użytkownika "mylist"
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);
rzuca NullPointerException
na linii assertEquals()
. Czemu? Co się dzieje, jeśli podano anyList()
?
Jesteś nie publikujemy wystarczającej ilości kodu, co utrudnia innym zorientowanie się, co dzieje się źle. Czy 'when (userTransactions' jest błędem ortograficznym? Jak powstaje' myList', jaka jest sygnatura metody 'getByCriteria()'? – Brad
Czy tu czegoś brakuje? Nadal publikujesz 'kiedy (userTransactions ...' i ten obiekt nie został utworzony.} Utworzono 'userTransaction' w powyższym kodzie, ale nie" userTransactions "(uwaga na" s "na końcu) .Jeśli debugujesz swój kod czy istnieje obiekt o nazwie 'userTransactions' i czy jest to wyśmiewany obiekt? – Brad
Czy możesz wyjaśnić, czy to rzuca wyjątek na linii z' when', czy na linii w teście, gdzie 'getByCriteria' jest rzeczywiście wywoływana? więcej twojego kodu - jak powiedzieli inni, tak naprawdę nie dostarczyłeś wystarczającej ilości informacji, abyśmy mogli zdiagnozować, co jest nie tak, –