Arg<T>.Property
是有关Rhino Mocks v3.5的内联约束的文档的一部分,但我在v.3.6中找不到它。发生了什么事?
文档在这里:http://ayende.com/Wiki/Rhino+Mocks+3.5.ashx?AspxAutoDetectCookieSupport=1#SimpleConstraints
约束参考表中提到了和Arg<T>.Property
。
答案 0 :(得分:3)
这似乎是文档中的错误。在对象浏览器中检查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>
,它更一致,更容易理解,即使有时候写一点。“
正如Jeff Bridgman所说,你也可以使用Arg<T>.Matches
:
myStub.Expect(x => x.MethodToCall(Arg<T>.Matches(m => m.PropertyName == myDesiredPropertyValue))).Result(myMockResult);
它具有'重构安全'的优点,这意味着您可以安全地重构属性的名称,而无需搜索任何“魔法字符串”。它还符合文档中的建议,而不是使用Arg<T>
而不是Constraints()
。