我是Junit测试用例的新手,有人可以通过以下方式取悦我。
我需要为用户密码重置编写一个junit测试用例。我不知道我怎么能在这里使用断言:
public @ResponseBody userInfo updatePassword(@RequestBody Map<String, String> userLookup, HttpServletRequest request) {
userInfo userInfo = new userInfo();
try {
Users user = Service.getUserDetailsByUsername(userLookup.get("username"));
user.setPassword(userLookup.get("newPassword"));
Service.updateUserPw(user);
logger.debug("Password updated successfully");
} catch (Exception ex) {
logger.debug("Error while updating user password!", ex);
}
return userInfo;
}
method:getUserDetailsByUsername returns a user with the username passed.
method:setPassword returns return void
method: updateUserPw returns void
答案 0 :(得分:0)
要编写JUnit测试,您必须首先创建并填充调用所需的所有对象和参数:
@Test
public void updatePasswordWithAValidPassword()
{
MyObject my=new MyObject();
Map<String, String> userLookup=new HashMap<String, String>();
userLookup.put("username", "...");
userLookup.put("newPassword", "january209");
HttpServletRequest request=null; // Fortunately, this method does not use the request parameter.
其次,执行电话:
userInfo user=my.updatePassword(userLookup, request);
最后,使用Assert.assert
*和Assert.fail
Assert.assertEquals("january209", user.getPassword());
}
为了达到高代码覆盖率,您应该为您的方法在执行时可能具有的每种可能的替代方法编写测试。在这种情况下,应该进行成功更改密码的测试(上面的示例),以及在更改密码时产生异常的其他测试(可能引入空密码或安全性较低的密码 - 太短,等等)。但是,遗憾的是,考虑到代码本身,调用者(= JUnit测试人员)不容易知道何时出现异常,因为它被系统地捕获并被忽略给调用者。
如果你想编写这样的测试,你必须首先重构你的方法,删除catch (Exception e)
并让异常传播给调用者(假设每种情况都有特定的例外:PasswordTooShortException
, InvalidNullPasswordException
等,所以你可以从测试人员那里得到它。