15

世界で次のテストが失敗しない理由を誰か教えてもらえますか?

[Test]
public void uhh_what() {
    var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
    a.Expect(x => x.Notify()).Repeat.Once();
    a.Notify();
    a.Notify();
    a.VerifyAllExpectations();
}

私が狂っていないことを確認するために、本当に2番目の目が必要です...今、すべてのテストが信頼できないのではないかと心配しています.

4

2 に答える 2

27

RhinoMocks グループにはすでにスレッドがあります。

GenerateMock は動的モックを作成します。動的モックは、指定されていない (=期待される) 呼び出しを許可します。これが発生した場合、null (または戻り値の型の既定値) を返すだけです。

注:繰り返しは (スタブのような) 動作の仕様であり、期待値で指定されていても期待値ではありません。

特定の数以上の呼び出しを避けたい場合は、次のように記述できます。

[Test]
public void uhh_what() 
{
    var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
    a.Expect(x => x.Notify()).Repeat.Once();
    a.Stub(x => x.Notify()).Throw(new InvalidOperationException("gotcha"));
    a.Notify();

    // this fails
    a.Notify();

    a.VerifyAllExpectations();
}

または

[Test]
public void uhh_what() 
{
    var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
    a.Notify();
    a.Notify();

    // this fails
    a.AssertWasCalled(
      x => x.Notify(), 
      o => o.Repeat.Once());
}
于 2009-05-20T12:10:56.067 に答える
9

GenerateMock を使用する場合 (または一般的に Dynamic Mocks を使用する場合)、私は常に以下を精神的に挿入します。

a.Expect(x => x.Notify()).Repeat. *[AtLeast] *Once();

于 2010-12-23T07:54:27.100 に答える