注入された依存関係のメソッドが特定の回数呼び出されることをテストしている次のことを検討してください。
[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
}
失敗したテストを強制すると、出力は次のようになります。
Moq.MockException: モックで呼び出しが 1 回実行されませんでした: e => e.Blink()
より良いのは次のようなものです:
Moq.MockException: 呼び出しが予期せず 1 回ではなく 2 回実行されました: e => e.Blink()
テストに関連する項目は次のとおりです。
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 に更新されていません…)