我正在为这样的方法编写单元测试:
public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
{
ISPMembershipUserDao userDao = GetISPMembershipUserDao();
if (ValidateUser(username, password))
{
SPMembershipUser user = userDao.GetUserByUserName(username);
user.PasswordQuestion = newPasswordQuestion;
user.PasswordAnswer = newPasswordAnswer;
userDao.Save(user);
return true;
}
return false;
}
这是一种相当简单的测试方法。我正在使用Rhino Mocks框架。但有一个方面让我质疑自己。我存根DAO对象及其保存方法,我想知道我应该多深入地测试传递给save方法的用户对象。我应该断言该对象的每个属性是否符合我的预期?或者我应该断言PasswordQuestion和PasswordAnswer属性是否具有正确的值?前者对我来说似乎是正确的,因为我应该确保仅这两个属性已被修改,而其他属性未被触及。
我希望有些人可以就此发表意见。对于这些类型的情况,是否需要记住一个经验法则或模式?
答案 0 :(得分:1)
警告:提前个人意见
好的,现在已经不在了......对我来说,这取决于我需要做些什么来感觉我的代码正确地实现了所需的逻辑。在这种情况下?我有两个测试用例:
然而,如果/当我收到影响这部分代码的错误时,我会添加任何(最初失败的)测试以覆盖错误,修复错误并离开测试。
答案 1 :(得分:0)
由于在这里设置约束非常容易,为什么不测试它以确保您的方法没有副作用?
stubbedUserDao.AssertWasCalled(x => x.Save(null), o => {
o.IgnoreArguments();
o.Constraints(Property.AllPropertiesMatch(expectedMatchingUser));
});