WhenCalled在整个地方都有详细记录。我不会讨论为什么我正在使用它,但我无法让它以与我在该主题上看到的每篇文章的详细内容相同的方式工作。
基本上你应该可以做类似的事情:
mock.Expect(x => x. SingleOrDefault(null))
.IgnoreArguments()
.WhenCalled(invocation => ((Action)invocation.Arguments[0]).Invoke());
但是这不能为我编译 - 我只是得到一个错误,说代理'System.Action'不带1个参数。
我正在使用V 4.0的Rhino Mocks - 这个方法改变了吗?我想用 WhenCalled抓取传递给SingleOrDefault的参数(在本例中为lambda表达式)。
答案 0 :(得分:1)
本博客文章中均回答:
以前,WhenCalled允许您执行一个Action,该Action将一个封装方法调用的数据结构作为单个参数。由于正在调用Action,因此无法更改期望的返回值。 在当前版本中,稍微修改了WhenCalled以简单地执行Action
为了提供与原始“WhenCalled”类似的功能,添加了一个新方法“Intercept”,它需要一个Action作为单个参数,包含一个封装方法调用的数据结构
tl; dr:使用Intercept而不是WhenCalled