Rhino Mocks的Arg <t> .Property </t>发生了什么

时间:2011-11-08 08:56:07

标签: rhino-mocks

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

1 个答案:

答案 0 :(得分: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> ,它更一致,更容易理解,即使有时候写一点。“

正如Jeff Bridgman所说,你也可以使用Arg<T>.Matches

myStub.Expect(x => x.MethodToCall(Arg<T>.Matches(m => m.PropertyName == myDesiredPropertyValue))).Result(myMockResult);

它具有'重构安全'的优点,这意味着您可以安全地重构属性的名称,而无需搜索任何“魔法字符串”。它还符合文档中的建议,而不是使用Arg<T>而不是Constraints()