Kann mir jemand das unten stehende Szenario
-Code erklären
UserTransaction.java
Junit Mockito wenn (..). ThenReturn() throws Nullpointer
@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);
}
getestet werden
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());
}
funktioniert gut.
Aber statt "anyList()" übergeben ich eine benutzerdefinierte Liste "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);
Wirft NullPointerException
an der Linie assertEquals()
. Warum? Was passiert eigentlich, wenn anyList()
angegeben wird?
Du bist nicht genug Code posten, was es für andere schwierig macht, zu sehen, wo du falsch liegst. Ist 'wann (userTransactions.' ein Schreibfehler? Wie wird' myList' erstellt? Was ist die Methodensignatur von 'getByCriteria()'? – Brad
Fehle ich hier etwas? Sie posten '' when (userTransactions ... ''und das Objekt wurde nicht erstellt. Sie haben' userTransaction' in Ihrem obigen Code erstellt, aber nicht 'userTransactions' (beachten Sie das" s "am Ende). Wenn Sie Ihren Code debuggen existiert ein Objekt mit dem Namen 'userTransactions' und es ist ein verspottetes Objekt? – Brad
Können Sie klären, ob es die Exception in der Zeile mit' when' oder in der Zeile innerhalb des Tests auslöst, wo 'getByCriteria' tatsächlich aufgerufen wird? mehr von Ihrem Code - wie andere gesagt haben, haben Sie nicht wirklich genug Informationen zur Verfügung gestellt, damit wir diagnostizieren können, was falsch ist –