特定のeventArgsでイベントが発生したときに、オブジェクト(たとえばFoo
)が特定のメソッド(たとえば)を呼び出すことを確認する単体テストがあります。Bar
上記のメソッドをモックするために、仮想を使用してFoo
クラスをスタブします
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
mockEventProvider.Raise( x => x.MyEvent += null, myEventArgs ) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
ただし、上記が失敗した場合、Fooオブジェクトがイベントで構築されていないため、Barは呼び出されません。ただし、次のような行を追加すると、次のようになります。
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
var workAround = stubbedFoo.Object //adding this workaround will work
mockEventProvider.Raise( x => x.MyEvent += null, myEventArgs ) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
get on .Objectを呼び出すと、モックがオブジェクトを構築するように強制されるため、これは機能します。この行を追加するよりもエレガントな解決策はありますか?