Pur*_*ome 2 .net asp.net rhino-mocks moq mocking
我正在玩一些单元测试和嘲笑.我正在尝试验证我的方法中的某些代码是否已被调用.我不认为我理解Verify正确的部分是正确的,因为我只能验证主要方法..这是愚蠢的,因为这是我Act无论如何.
我正在尝试测试我的逻辑是否正常工作 - 所以我认为我使用Verify来查看方法中的某些步骤已经达到并颁布.
让我们用这个例子来强调我做错了什么.
public interface IAuthenticationService
{
bool Authenticate(string username, string password);
SignOut();
}
public class FormsAuthenticationService : IAuthenticationService
{
public bool Authenticate(string username, string password)
{
var user = _userService.FindSingle(x => x.UserName == username);
if (user == null) return false;
// Hash their password.
var hashedPassword = EncodePassword(password, user.PasswordSalt);
if (!hashedPassword.Equals(password, StringComparison.InvariantCulture))
return false;
FormsAuthentication.SetAuthCookie(userName, true);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在,我想验证一下
EncodePassword 被称为.FormsAuthentication.SetAuthCookie(..) 被称为.现在,我并不关心这两者的含义.更重要的是,我不想测试这些方法.这必须在其他地方处理.我应该做的是验证那些方法是否被调用,如果可能的话......返回了预期的结果.
这是否正确理解'验证'对模拟的意义?
如果是这样,有人可以告诉我如何做到这一点.优先考虑,moq但我对任何事情都很满意.
您通常应该(IMO,至少)模拟依赖项而不是正在测试的类中的其他方法.例如,您可以拥有一个IPasswordEncoder用于EncodePassword呼叫的接口.你可以模拟它,并验证该方法已被调用...但在同一个类中,它没有那么多意义.
我敢说很多嘲弄框架可以做这种嘲弄,但我个人不会鼓励它.如果您已找到希望能够注入不同功能的位置,请考虑将它们作为单独的依赖项.