1
public boolean changePassword(User user, String newpass) {
user.setPasswordHash(newpass);
if(update(user) == false)
return false;
return true;
}
public boolean update(User user){
SqlSession session = factory.openSession()
try {
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.update(user);
session.commit();
return true;
}catch (Exception e){
e.getMessage();
return false;
}
finally {
session.close();
}
}
现在这是我的一个test.it是当改变Pasword成功。我如何测试更新方法使用Junit
@Test
public void shouldChangeUserPasswordWhenAsked() {
User updatedUser = new User();
updatedUser.setUserName("user");
updatedUser.setPasswordHash("newpassword");
when(userMapper.findByUsername("user")).thenReturn(updatedUser);
Boolean updateResult = userService.password(user,"newpassword");
verify(userMapper).update(user);
assertEquals("updatedUserSuccess",userService.getByUsername(user.getUserName()).getPasswordHash(),"newpassword");
assertEquals("updatedSuccess",updateResult,true);
}
现在我想如何测试失败的情况,我该怎么办呢?我应该更改我的更新方法吗?测试之前,我嘲笑dabase和一些方法依赖于数据库这样
@Before
public void setup(){
session = mock(SqlSession.class);
userMapper = mock(UserMapper.class);
userRoleMapper = mock(UserRoleMapper.class);
sessionFactory = mock(SqlSessionFactory.class);
when(sessionFactory.openSession()).thenReturn(session);
when(session.getMapper(UserMapper.class)).thenReturn(userMapper);
when(session.getMapper(UserRoleMapper.class)).thenReturn(userRoleMapper);
userService = new UserServiceImpl(sessionFactory);
user = new User();
user.setUserName("user");
user.setPasswordHash("password");
}
我不会更改生产代码以获得测试运行... –