Arg<T>.Property
是Rhino Mocks v3.5內聯約束文檔的一部分,但是我在v.3.6中找不到它。發生了什麼?Rhino Mocks的Arg.Property
該文檔是在這裏:http://ayende.com/Wiki/Rhino+Mocks+3.5.ashx?AspxAutoDetectCookieSupport=1#SimpleConstraints
和Arg<T>.Property
在約束提到參考表。
Arg<T>.Property
是Rhino Mocks v3.5內聯約束文檔的一部分,但是我在v.3.6中找不到它。發生了什麼?Rhino Mocks的Arg.Property
該文檔是在這裏:http://ayende.com/Wiki/Rhino+Mocks+3.5.ashx?AspxAutoDetectCookieSupport=1#SimpleConstraints
和Arg<T>.Property
在約束提到參考表。
這似乎是文檔中的一個錯誤。當在對象瀏覽器中檢查Rhino.Mocks.dll
(3.6.0.0)時,我看到Rhino.Mocks.Arg<T>
僅提供方法Is
和List
,但不提供Property
。
但是Rhino.Mocks.Constraints
包含Property
類。使用 「老」 的語法,你應該能夠做同樣的:
AAA語法(產生編譯錯誤):
myStub.Expect(x => x.MethodToCall(Arg<T>.Property.Value("PropertyName", myDesiredPropertyValue))).Result(myMockResult);
舊語法(工作):
myStub.Expect(x => x.MethodToCall(null)).Constraints(Property.Value("PropertyName", myDesiredPropertyValue)).Result(myMockResult);
文檔說「你可能已經習慣了IgnoreArguments()
,Constraints()
和RefOut()
。[...]鼓勵只使用Arg<T>
,它更加一致和易於理解,即使有時候更多一點寫。」
傑夫布里奇曼指出,你也可以使用Arg<T>.Matches
:
myStub.Expect(x => x.MethodToCall(Arg<T>.Matches(m => m.PropertyName == myDesiredPropertyValue))).Result(myMockResult);
它擁有的是「refactory安全」,這意味着你可以重構屬性的名稱安全,而不需要搜索的優勢對於任何'魔術串'。它也符合文件中的建議,寧可使用Arg<T>
而不使用Constraints()
。
是的,我最終還是使用了Arg
我也想知道發生了什麼...更具體地說,有什麼更好的選擇。你也許可以使用Arg.Matches ... –