RhinoMocks - 存根方法只调用一次

时间:2011-03-29 14:20:58

标签: rhino-mocks

这是一些测试代码:

var searchCommand = MockRepository.GenerateStub<ISearchCommand>();
activityCreatedDateQuery = new ActivityCreatedDateQuery(searchCommand, maxRows);
searchCommand.Stub(x => x.GetResults(activityCreatedDateQuery))
                .Return(GetCreatedDateQueryMockData()));

这就是......当我最初拨打内部呼叫activityCreatedDateQuery.ExecuteQuery()的{​​{1}}时,会按预期调用searchCommand.GetResults(this)

我第二次在线程中调用它,GetCreatedDateQueryMockData()没有被调用,而是前一个调用的结果是(导致IDataReader关闭异常)。

这显然是设计上的行为,所以如何确保代理总是被调用...我已经探索过Stub.Repeat.WhenCalled.CallBack等没有运气......

3 个答案:

答案 0 :(得分:2)

问题是“Return”不接受委托,只需要一个对象。 GetCreatedDataQueryMockData()方法调用在您设置Stub时执行,并将值保存在框架内作为返回值。

您需要的是每次调用存根时都要调用的真正委托。最近有人在Stackoverflow上询问了这个问题,我created a little extension method就这样做了。

答案 1 :(得分:1)

我遇到了类似的问题。

searchCommand.Stub(x => x.GetResults(activityCreatedDateQuery))
            .Return(null).WhenCalled(i => i.ReturnValue = GetCreatedDateQueryMockData()));

在我的案例中工作。它起作用是因为&#34; WhenCalled()&#34;不像&#34; Return()&#34;使用代表。

使用&#34; WhenCalled()&#34;不要忘记在&#34; Return()&#34;。

中加入一个虚拟值

答案 2 :(得分:0)

尝试

searchCommand.Stub(x => x.GetResults(activityCreatedDateQuery))
            .Return(GetCreatedDateQueryMockData())).Repeat.Any();