如何根据收到的参数模拟从数据库返回的对象?
How to mock the object returned from DB base on the parameter received?
我有一个从数据库查询用户的方法。如果 ID 匹配且创建日期在特定日期内,它将 return 用户
public User findUserCreatedLastTwoDays (String id, Date dateAccepted)
// select * from User u where u.id = id and u.dateCreated > dateAccepted
return User;
我想使用 Mockito 为这个简单的方法编写单元测试。我刚开始学习 Mockito,不确定如何模拟用户对象来测试两种不同的场景,当 dateCreated > dateAccepted(return 用户)和 dateCreated < dateAccepted(return null)时。
需要这样写条件吗
User testUser = new User();
testUser.setDateCreated(new Date() - 3);
if (dateCreated > dateAccepted)
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(testUser);
else
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(null);
看看我如何实现这个。
我认为最简单的方法是使用 Answer:
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenAnswer(new Answer<User> () {
User answer(InvocationOnMock invocation) {
return dateCreated > dateAccepted ? testUser : null;
}
}
这样做的好处是使用当时的当前值而不是创建模拟时的值。如果这对你来说不重要,你也可以使用建议的代码:
if (dateCreated > dateAccepted) {
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(testUser);
} else {
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(null);
}
我有一个从数据库查询用户的方法。如果 ID 匹配且创建日期在特定日期内,它将 return 用户
public User findUserCreatedLastTwoDays (String id, Date dateAccepted)
// select * from User u where u.id = id and u.dateCreated > dateAccepted
return User;
我想使用 Mockito 为这个简单的方法编写单元测试。我刚开始学习 Mockito,不确定如何模拟用户对象来测试两种不同的场景,当 dateCreated > dateAccepted(return 用户)和 dateCreated < dateAccepted(return null)时。
需要这样写条件吗
User testUser = new User();
testUser.setDateCreated(new Date() - 3);
if (dateCreated > dateAccepted)
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(testUser);
else
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(null);
看看我如何实现这个。
我认为最简单的方法是使用 Answer:
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenAnswer(new Answer<User> () {
User answer(InvocationOnMock invocation) {
return dateCreated > dateAccepted ? testUser : null;
}
}
这样做的好处是使用当时的当前值而不是创建模拟时的值。如果这对你来说不重要,你也可以使用建议的代码:
if (dateCreated > dateAccepted) {
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(testUser);
} else {
when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(null);
}