2011-11-08 35 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