2011-11-08 128 views

回答

3

這似乎是文檔中的一個錯誤。當在對象瀏覽器中檢查Rhino.Mocks.dll(3.6.0.0)時,我看到Rhino.Mocks.Arg<T>僅提供方法IsList,但不提供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()

+0

是的,我最終還是使用了Arg .Matches方法,因爲它的'沒有附加魔術字符串'的質量。感謝您的答案。 – martinnjensen