2016-09-14 17 views
0

私はMoqの新機能ですが、これも可能ですが、GeneratedHashedAndSaltedPassword()というメソッドが1つあればCheckUsersPassword()という名前のメソッドからのそのメソッドは、次のようなユニットテストMoq式から書き込むことができます。GeneratedHashedAndSaltedPasswordCheckUsersPasswordメソッドから呼び出されているかどうかを確認しますか?メソッドへの呼び出しがMoqを使用して別のメソッドから行われているかどうか確認してください

GeneratedHashedAndSaltedPasswordメソッドを例外なく呼び出すと、CheckUsersPasswordメソッドが正しく実行されていることがわかります。

私はMoqとの時間が苦労しているので、今はあまりないです。それは論理です。

[Test] 
public void CheckIfPasswordIsHashed_Test() 
{ 
    var securityServiceMock = new Mock<User>(); 
    securityServiceMock.Setup(m => m.CheckUsersPassword(It.IsAny<string>())).Returns(true); 
    securityServiceMock.VerifyAll(); 
} 

私はセットアップCheckUsersPasswordにしようとしていたが、私はまだ、私は必要があるかまたは私が検証をプリフォームすることができても、知りません。誰かがこの種の問題でより多くの経験を持っていますか?

これはCheckUserPasswordが何をするかである:それはGenerateHashedAndSaltedPassword()に、単純な呼び出しを行うと、現在のユーザーのパスワードを使用して結果を比較

public bool CheckUsersPassword(string password) 
{ 
    return SecurityService.GenerateHashedAndSaltedPassword(password, Salt) == Password; 
} 

+0

SecurityServiceインスタンスは、 'CheckUsersPassword'メソッドを含むクラスのコンストラクタに挿入されていますか? – Corporalis

+0

は私には静的な静的メソッドのようです。 – Fran

答えて

1

ユニットテストでテストされたコードとこのコードの外部依存関係を区別することが重要です。外部依存関係はMOQで嘲笑されますが、テストされたコードはユニットテストで直接インスタンス化して呼び出さなければなりません。

あなたの質問で私はあなたが方法CheckUsersPasswordをテストし、そのSecurityServiceが嘲笑されるべき依存関係であると仮定します。

テストでは、(テストされたメソッドを含む)クラスのインスタンスを作成し、このテストされたクラスに何らかの形で依存関係を渡す必要があります。

[Test] 
public void CheckIfPasswordIsHashed_Test() 
{ 
    // Arrange 
    // Mock dependency which is the service and setup 
    // GenerateHashedAndSaltedPassword so it does what you need 
    var securityServiceMock = new Mock<User>(); 
    securityServiceMock.Setup(m => m.GenerateHashedAndSaltedPassword(
     It.IsAny<string>(), 
     ItIsAny<Salt>()) 
    .Returns(Password); 

    // TestedClass needs a place where the mocked instance can be injected, 
    // e.g. in constructor, or public property 
    var testedClass = new TestedClass(securityServiceMock.Object); 

    // Act 
    testedClass.CheckUsersPassword(password); 

    // Assert 
    securityServiceMock.Verify(m => m.GenerateHashedAndSaltedPassword(
     It.IsAny<string>(), 
     ItIsAny<Salt>()), 
    Times.Once()); 
} 
+0

ありがとうございます。その間、私は、テストされたユニットの外部依存関係はMoqで嘲笑されなければならないことを認識しましたが、テストされたコードは実際のインスタンスでなければなりません:)しかし、ここでそのような良い説明があることは素晴らしいです:) @dee –

関連する問題