2009-06-28 62 views
0

我再次遇到问题,不知道我这次做错了什么。我这次和Moq做错了什么?

所以我打算通过调试器一步一步,我注意到,即使在我的模拟我设置

ResetPassword返回“嘿,这似乎并没有

这里是我的单元测试的一部分:

var membershipMock = new Mock<MembershipProvider>(); 



      var user = new Mock<MembershipUser>(); 

      user.SetupGet(x => x.Email).Returns("Email"); 
      user.Setup(x => x.ResetPassword("test")).Returns("hey"); 

      membershipMock.Setup(m => m.GetUser("chobo2", false)).Returns(user.Object); 



      authentication.Authenticate.Provider = membershipMock.Object; 

      // Act 

      var actual = authentication.PasswordRecoveryStep2("chobo2","2z"); 

我的代码

MembershipUser userName = Provider.GetUser(user, false); 

       string newPassword = userName.ResetPassword(securityAnswer); 

Mail.To = userName.Email; 

提供商是一个属性THA t随着你看到的模型对象被设置。电子邮件部分填写正常。只是ResetPassword不会返回它应该的。它只是给我空。

感谢

回答

7

如果“2Z”是您的安全起订量的答案将不会返回“哎”,因为它的安装只返回“哎”相匹配“测试”这个字符串输入。完美的我了以下工作:

public class AuthenticationHelper { 
    readonly MembershipProvider _provider; 

    public AuthenticationHelper(MembershipProvider provider) { 
     _provider = provider; 
    } 

    public string PasswordRecoveryStep2(string userName, string recoveryAnswer) { 
     MembershipUser user = _provider.GetUser(userName, false); 
     string newPassword = user.ResetPassword(recoveryAnswer); 
     return newPassword; 
    } 
} 

传送下列测试...

[TestFixture] 
public class AuthHelperTests { 
    Mock<MembershipProvider> memberShipProvider; 
    Mock<MembershipUser> user; 

    [SetUp] 
    public void Init() { 
     memberShipProvider = new Mock<MembershipProvider>(); 
     user = new Mock<MembershipUser>(); 
     user.SetupGet(u => u.Email) 
      .Returns("[email protected]"); 
     user.Setup(u => u.ResetPassword("secret")) 
      .Returns("test2"); 
     memberShipProvider 
      .Setup(prov => prov.GetUser("test", false)) 
      .Returns(user.Object); 
    } 

    [Test] 
    public void WillResetPasswordByCallingProvider() { 
     var helper = new AuthenticationHelper(memberShipProvider.Object); 
     string newPassword = helper.PasswordRecoveryStep2("test", "secret"); 
     Assert.AreEqual("test2", newPassword); 
     memberShipProvider.Verify(p => p.GetUser("test", false)); 
     user.Verify(u => u.ResetPassword("secret")); 
    } 
} 
+0

尼斯它只是测试,它似乎工作。我不知道它是在寻找一场比赛,我认为它并不在乎这些东西是什么。 现在如果有人能告诉我什么时候我会知道.Net中的一个方法是虚拟的,有一个接口和额外的,所以我可以知道我是否可以嘲笑它。 我想用MailMessage(sys.net)做一些事情,我不确定是否必须编写我自己的接口和包装器。 – chobo2 2009-06-29 03:02:59