2009-08-17 6 views
2

私はmoqを試していますが、Setup()メソッドに関する質問があります。私は、次のインタフェースとクラスがあります。Setup()を使用してMoqの動作を設定する際の質問

public interface IMyInterface 
{ 
    void Print(string name); 
} 
public class MyClass 
{ 
    private IMyInterface my; 
    public MyClass(IMyInterface my) 
    { 
     this.my = my; 
    } 

    public void Print() 
    { 
     my.Print("hello world"); 
    } 
} 

をそして私はNUnitのを使用して、このユニットテストを持っている:

[Test] 
public void AnotherTest() 
{ 
    var mock = new Mock<IMyInterface>(); 
    mock.Setup(m => m.Print("hello world")).AtMostOnce(); 

    var myClass = new MyClass(mock.Object); 
    myClass.Print(); 

    mock.Verify(m => m.Print("hello world"), Times.Exactly(1)); 
} 

私は以下のラインアウトコメント解除コメント/両方に試したし、両方のテストでした成功した。私はVerify()をやっているので、Setup()が必要なのかどうか疑問です。

バージョン3.5.716.1を使用しています。

答えて

2

最初の例では正しいですが、セットアップが正確に1回実行されたことを確認しているので、セットアップを呼び出す必要はありません。

しかし、2回目の単体テストでは、実際に設定を確認していないので、それは過ぎます。

mock.VerifyAll()を呼び出すと、テストは失敗します。

AtMostOnce()は、一度だけ実行されるという期待を設定します。セットアップが一度呼び出されたことを明示的に確認すると、テストは失敗します。あなたはそれを複数回呼び出すだけで実際には失敗することはありません。

+0

はい、私はちょうどテストが第2のquetsionに関して渡された理由を理解しました。 – Jeff

+0

すべてのシナリオを手動で検証するのは、動作を設定するよりも明白です。VerifyAll()を実行してください。 – Jeff

関連する問題