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 ... –