Gam*_*ogo 8 java junit unit-testing mockito
假设我有以下服务对象
public class UserService {
@Autowired
private UserDao dao;
public void addUser(String username, String password) {
if (username.length() < 8 ) {
username = username + "random" ; // add some random string
}
User user = new User(username, password);
dao.save(user);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望在用户名长度小于8且用户名大于8个字符时测试方法"addUser"的行为.如何在单元测试UserService.addUser(...)中进行验证并验证它?我知道使用assert(),但值"password"在addUser(...)方法之外是不可用的.
我使用JUnit和Mockito.
在几个月后再次重新访问问题后,我提出了一个解决方案.
我们的想法是观察传递给UserDao的对象用户.我们可以通过执行此操作来检查用户名的值,因此单元测试代码:
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@Mock
private UserDao dao;
@InjectMock
private UserService service;
@Test
public void testAddingUserWithLessThan8CharUsername () {
final String username = "some";
final String password = "user";
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
Object[] args = invocationOnMock.getArguments();
User toBeSaved = (User) args[0];
Assert.assertEquals(username + "random", toBeSaved.getPassword());
return null;
}
}).when(userDao).save(Matchers.any(User.class));
service.addUser(username, password);
}
}
Run Code Online (Sandbox Code Playgroud)
Guillaume实际上有最接近的答案,但他回答使用jMock.但是,他给了我关于如何实现这个目标的想法,所以我认为他也应该得到一些荣誉.
| 归档时间: |
|
| 查看次数: |
4195 次 |
| 最近记录: |