这是一些测试代码:
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等没有运气......
答案 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();