プロパティは、Rhinoのモックを介してアクセスされた場合、私は教えてもらえます
-
18-09-2019 - |
質問
私はRhinoのモックを使用して嘲笑しているインタフェースのプロパティを持っています。私はそれが私のユニットテストにアクセスしたかどうかを知りたい。
プロパティがRhinoのモックを介してアクセスされたかどうかを確認する方法はありますか?
私はここで、このコードはを発見しました>動作していないよう:
string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});
私はこのコードを再現し、私は次の取得ます:
Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..
私はこの構文を使用したいと思いますが、私は何かが欠けている必要があります。私はそれが違いを生むんスタブ(ないモック)でそれを呼び出すのですか?
解決 2
私は仕事をして使用した構文が判明。プロパティはPropertyBehaviorモードでない場合でも、それだけで動作します。 (どのスタブのデフォルトであり、モックのために点灯させることができる)。
PropertyBehaviorモードがオンになると、は、その構文は動作しません。 Ayendeするによると、あなたはその時点で値をチェックする必要があります。
他のヒント
プロパティかどうかを確認する方法はあります Rhinoのモックを経由してアクセスした?
はい。あなたは、プロパティの期待を設定することができます。検証が投げていない場合は、プロパティがアクセスされた知ってます:
var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe");
mocks.ReplayAll()
// test something that uses IFoo here ...
mocks.VerifyAll(); // Throws if foo.Name was not accessed after ReplayAll()
これは、すべてあなたがfoo.Name
がアクセスできるようにしたいと仮定しています。あなたの目標はそれがあることを確認する場合のありませんのアクセス、そしてあなただけStrictMockの代わりDynamicMockを使用する必要があります。厳格なモックは、予期しないコールのためにスローされます。
、あなたは常にモックを使用する必要があります。スタブを使用すると、相互作用をテストしたくない状況であるが、ちょうどいくつかのオブジェクトへの呼び出しは、論理の流れを作るために、特定の値を返すことを確認する。
私はStrictMockあなたが探しているものであると信じています。ここをそれに関するいくつかの情報があります。これの使用は、しかし、それはあなたが何をしようとして達成するのを助ける必要があり、それはテストがあまりにも脆いことができますので、落胆していると言われています。
あなたはStackFrame
クラスを使用してコールスタックを確認することができます。非常にきれいな、それは望ましい結果を与える必要がありません...
私は通常使用部品番号をあなたの代わりにそれを検討するかもしれないので、城を使用します/一緒にRhinoのモックのと。これは、あなたがそれを行うことができる方法です。
// expects an invocation to set the value to "foo"
mock.SetupSet(foo => foo.Name = "foo");
// or verify the setter directly
mock.VerifySet(foo => foo.Name = "foo");