53

別のオブジェクトにコンストラクター引数として渡されるモック オブジェクトがあります。

モックされたオブジェクトのプロパティが呼び出されたことをテストするにはどうすればよいですか? これは私が現在使用しているコードです:

INewContactAttributes newContact = MockRepository.GenerateMock<INewContactAttributes>();
newContact.Stub(x => x.Forenames).Return("One Two Three");
someobject.ConsumeContact(newContact);
newContact.AssertWasCalled(x => { var dummy = x.Forenames; });

これは、「someobject」内で Forenames プロパティのゲッターが複数回使用されている場合を除いて機能します。そのとき、「Rhino.Mocks.Exceptions.ExpectationViolationException: INewContactAttributes.get_Forenames(); Expected #1, Actual #2..」を取得します。

単に使用する

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Any());

動作せず、以下のエラーが発生します。

「待機中の期待値リストから期待値が削除されました。 Repeat.Any() を呼び出しましたか? これは AssertWasCalled() ではサポートされていません。」

では、複数の通話に対応するにはどうすればよいでしょうか。

4

6 に答える 6

76

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());

Repeat.Any0 はすべてとしてカウントされるため、は機能しませんAssertWasCalled... したがって、呼び出さAsserWasCalledれなかった場合、呼び出されなくても TRUE を返します。

于 2009-06-19T23:45:14.550 に答える
28

私はクリスの答えに同意します

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());

さらに、プロパティが呼び出される回数が正確にわかっている場合は、次のことができます

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Times(n));

ここで、n は int です。

于 2010-07-16T12:16:44.593 に答える
2

使用しているRhinoのバージョンに応じて、次のものを使用できます。

// Call to mock object here
LastCall.IgnoreArguments().Repeat.Never();
于 2009-09-07T20:40:49.787 に答える
2

呼び出された回数をチェックする動機は何ですか? それは特に高価な操作ですか?もしそうなら、意味的に言えば、プロパティは安価な呼び出しであるべきなので、代わりにメソッドの背後に置くことをお勧めします。

また、プロパティが呼び出された回数をチェックすることは、単体テストの目的ではありません (テストしすぎることはよくある間違いです。私たちは皆経験しています)。実際にテストする必要があるのは、メソッドが期待される出力を生成するモック オブジェクトの状態が与えられることです。それを行うためにメソッドが呼び出される回数は、実際には問題ではありません (メールなどを送信するサービスでない限り)。これは実装の詳細であり、単純なリファクタリングではテストが具体的すぎるためにテストが中断されるため、通常はテストしません。

于 2009-04-08T09:48:35.033 に答える
0

newContact.Expect( c => c.ForeNames ).Return( ... ).Repeat.Any()

于 2009-04-08T09:50:59.630 に答える
0

ここから:

mock.AssertWasCalled(x => x.Name ="Bob");

また

mock.AssertWasCalled(x => x.Name =Arg.Is("Bob"));

また

mock.AssertWasCalled(x => x.Name =Arg<string>.Is.NotNull);
于 2011-10-11T14:02:39.340 に答える