AAAを使用して、プロパティのゲッターにRhinoのモックAssertWasCalled(複数回)
-
05-09-2019 - |
質問
私は別のオブジェクトへのコンストラクタの引数として渡された嘲笑オブジェクトを持っています。
どのように私は嘲笑オブジェクトのプロパティが呼び出されていることをテストすることができますか?これは私が現在使用していたコードです。
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();予想#1、#2実際.."
単に使用して
newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Any());
仕事と下のエラーを与えていません
「期待はこれがAssertWasCalled()でサポートされていない?)あなたはRepeat.Anyを(呼んだ、待機期待リストから削除されました。」
それでは、どのように私は、複数の呼び出しに応じるのか?
解決
newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());
Repeat.Any
がどのように0カウントのでAssertWasCalled
では動作しません...ので、それが呼び出されなかった場合、AsserWasCalled
は、それが呼び出されなかった場合でも、trueを返します。
他のヒント
私はクリスの答えに同意する
newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());
あなたはプロパティは、あなたが行うことができますと呼ばれます正確にどのように何回も知ってさらに場合
newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Times(n));
、nは整数である。
が呼び出された回数を確認するの背後にあるあなたの動機は何ですか?それは特に高価な操作ですか?もしそうなら、私はあなたが意味的に言えば、性質が安価な通話する必要があります、と代わりの方法の後ろにそれを置くことをお勧めします。
また、プロパティが呼び出された回数をチェックするユニットテストの推力は、(我々はすべてそこにしてきた、あまりにも多くをテストするために一般的な間違いです心配しないでください)ではありません。あなたが本当にテストすべきは、この方法が期待される出力を生成することを、あなたのモックオブジェクトの状態を与えられたということです。 (それは電子メールか何かを送信するためのサービスでない限り)メソッドは、それを行うために呼び出される回数は本当に問題ではありません。それは彼らがあまりにも具体的なように、単純なリファクタリングは、テストを破るよう、あなたが正常にテストしないと、実装の詳細である。
は、使用しているサイのバージョンによっては、あなたが使用することができます:
// Call to mock object here
LastCall.IgnoreArguments().Repeat.Never();
newContact.Expect(C => c.ForeNames).Return(...).Repeat.Any()
からここにするます:
mock.AssertWasCalled(x => x.Name ="Bob");
または
mock.AssertWasCalled(x => x.Name =Arg.Is("Bob"));
または
mock.AssertWasCalled(x => x.Name =Arg<string>.Is.NotNull);