2009-06-28 16 views
0

moqの問題が再発していますが、今回は何が間違っているのか分かりません。今回は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ですあなたと同じようにモックアップオブジェクトで設定されます。電子メールの部分はうまくいっています。ちょうどResetPasswordが返すものは返されません。それはただ私にnullを与える。

おかげ

答えて

7

「2Zは、」それが設定だと部品番号が「テスト」に一致する文字列を入力するための「ちょっと」だけのリターンに「ちょっと」は戻りませんセキュリティの答えである場合。完全に私のために、次の作品:それはちょうどテストし、動作しているようです以下のテスト...

[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

ニースを渡し

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; } } 

。私はそれが何かが気にしないと思った試合を探していたのか分からなかった。 誰かが、.NetのメソッドがVirtualのときにいつ知っているか教えてもらえれば、インターフェイスと余分なものがあるので、私はそれを模擬することができるかどうかを知ることができます。 私はMailMessage(sys.net)でいくつかのことをやろうとしています。私自身のインターフェースとラッパーを書く必要があるかどうかはわかりません。 – chobo2

+1

"test"の代わりにIt.IsAny ()を使用するだけで気にしないでください。 –

関連する問題