2009-08-18 8 views
2

私はRhino Mockを使って模擬したインターフェースにプロパティを持っています。私はそれが私のユニットテストでアクセスされたかどうかを知りたい。プロパティがRhino Mock経由でアクセスされたかどうかを確認できます

プロパティがRhino Mock経由でアクセスされたかどうかを確認する方法はありますか?

私はこのコードhereを見つけたが、動作していないよう:

string name = customerMock.Name; 
customerMock.AssertWasCalled(x => {var ignored = x.Name;}); 

私はこのコードを再現し、私は次の取得:

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0.. 

私はこの構文を使用したいのですが、私は何かを欠いているに違いない。私はスタブ(擬似ではない)でそれを呼んでいますが違いがありますか?

答えて

1

私が使用していた構文が働きます。しかし、プロパティがPropertyBehaviorモードでない場合にのみ機能します。 (これはスタブのデフォルトであり、モック用にオンにすることができます)。

PropertyBehaviorモードがオンになると、その構文は機能しません。 Ayendeによれば、その時点で値を確認する必要があります。

0

私はStrictMockがあなたが探しているものだと信じています。それについていくつかの情報がありますhere。それは、テストが脆弱になる可能性があるため、使用をお勧めしますが、あなたがしようとしていることを達成するのに役立つはずです。

0

StackFrameクラスを使用してコールスタックをチェックできます。あまりクリーンではありませんが、希望の結果が得られるはずです...

0

私は通常、Castleを使用するMoqを使用していますので、代わりに/ Rhino Mockと一緒に使用することを検討してください。プロパティ は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"); 
3

あります:これは、あなたがそれを行うことができる方法ですか?

はい。プロパティの期待値を設定することができます。検証が投げていない場合は、プロパティがアクセスされた知っている:

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がアクセスできるようにしたいと仮定しています。あなたの目標がではなく、にアクセスしていることを確認する場合は、DynamicMockの代わりにStrictMockを使用するだけです。予期しない呼び出しがあった場合、厳格な模擬テストがスローされます。

1

メソッドが呼び出されたこと、または偽装されたオブジェクトでアクセスされたプロパティをアサートする場合は、常にモックを使用する必要があります。スタブは、インタラクションをテストしたくない状況に適していますが、一部のオブジェクトへの呼び出しが特定の値を返してロジックが流れるようにしたいだけです。

関連する問題