2013-05-22 2 views
9

を使用して、実際のメソッド呼び出し回数は、次の点を考慮含まれています部品番号を確認してください()メソッドの呼び出し回数を使用した場合、テストのエラーメッセージが失敗していることは、私が注入された依存関係のメソッドは、特定の回数と呼ばれていることをテストしていた場合部品番号

[Fact] 
public void WhenBossTalksEmployeeBlinksTwice() 
{ 
    // arrange 
    var employee = new Mock<IEmployee>(); 
    employee.Setup(e => e.Blink()); 

    var boss = new Boss(employee.Object); 

    // act 
    boss.Talk(); 

    // assert 
    employee.Verify(e => e.Blink(), Times.Exactly(2)); // Passes as expected 
    employee.Verify(e => e.Blink(), Times.Exactly(1)); // Fails as expected 
} 

Iが失敗テストを強制する場合、出力は:

Moq.MockException:呼び出しがモック1時間に実行されなかった:E => e.Blink()

何方が良いだろうことのようなものです:

Moq.MockException:E => e.Blink()

ここでは、次のとおりです。呼び出しが予期せない1時間は、2回行いましたテストに関わる項目:

public interface IEmployee { void Blink(); } 

public class Boss { 
    private readonly IEmployee _employee; 
    public Boss(IEmployee employee) { _employee = employee; } 

    public void Talk() { 
     _employee.Blink(); 
     _employee.Blink(); 
    } 
} 

は収穫と実際の回数に依存関係を表示することが可能です失敗したテストのエラーメッセージで、メソッドが呼び出されましたか?

私はMoq v3.1.416.3を使用しています(最新ではありませんが、私が使用している別のライブラリはまだMoq 4.xに更新されていません...)

+1

1の設定にコールバックを使用している :) – ljubomir

+3

私はグーグルでこれを見つけたので、私は私が更新を提供するだろうと思いました。 Moq v4.1(そしておそらくすべての4.x)では、「モックに期待される呼び出しは1回でしたが、0回でした。だから、この質問への答えはすぐにそのままです。 –

答えて

12

Moq3の情報を収穫する方法はわかりません。私はどうなることは例のコードのために点滅

int count = 0; 
    employee.Setup(e => e.Blink()).Callback(() => count++); 

    ... 
    employee.Verify(e => e.Blink(), Times.Exactly(1), "Moq.MockException: Invocation was unexpectedly performed " + count + " times, not 1 time: e => e.Blink()"); // Fails as expected 
+3

素晴らしいアイデア!あなたはMoq 4.xを個人的に使うときに何か違うことをしますか? – Jeff

関連する問題