玩弄犀牛嘲笑,我只是偶然發現了一個奇怪的行爲,我不明白。犀牛嘲笑 - MethodInvocation.ReturnValue與IMethodOptions.Return
設置我的存根的工作原理如下預期 - 42返回
var generator = MockRepository.GenerateStub<INumberGenerator>();
generator.Stub(x => x.GetNumber()).Return(42);
然後我嘗試使用WhenCalled(Action<MethodInvocation> action)
擴展,這是我到目前爲止只用於無效功能:
generator.Stub(x => x.GetNumber()).WhenCalled(mi => mi.ReturnValue = 42);
此代碼引發了一個例外Method 'INumberGenerator.GetNumber();' requires a return value or an exception to throw.
。好吧,我已經添加了.Return(55)
- 現在事情開始變得怪異:
generator.Stub(x => x.GetNumber()).WhenCalled(mi => mi.ReturnValue = 42).Return(55);
現在返回,而不是。請注意,MethodInvocation.ReturnValue
只有適用於添加.Return(..)
語句,然後對返回值完全沒有影響 - 這使我很困惑。任何人都可以解釋這種行爲嗎?
沒錯。我總是這樣寫:'.Stub(...)。WhenCalled(...)/ *使Rhino高興* /。返回(0)'(多行,這在評論中是不可能的) –
/*使犀牛快樂* /是一個該死的衝牀線肯定!總結犀牛的嘲笑...因此MoQ;) – Vandesh
我認爲這不是太糟糕。 WhenCalled使用非常罕見。對於「正常」使用情況,重要的是要進行一些驗證。在這種情況下,Rhino不知道你已經在WhenCalled中指定了返回值。好的,它可能會假設它。 –