Und*_*ity 6 rhino-mocks mocking stub
我非常感谢任何人都能在下面提到的问题上帮助我:我一直在单元测试中使用RhinoMock.我以这种方式定义我的模拟对象,sessionToken是字符串类型的:
mockRepository.Stub(repository => repository.FindById(sessionToken)).Return(new DeviceTypeRepository().NewTable(false));
调用FindById()以返回有效的新的新DeviceTypeRepository()时,代码部分是可以的.NewTable(false);
但是,当将一个复杂参数作为对象(如DataTable)包含到Stub中时,如下所示:
mockRepository.Stub(repository => repository.Find(sessionToken, dataTable)).Return(new DeviceTypeRepository().NewTable(false));
然后,在该代码段查找()被调用时,它不返回预期的新DeviceTypeRepository().newtable的(假).请注意,参数dataTable的输入值在Stub和Find()调用中都是相同的.
因此,我的问题是:我如何使用RhinoMock将这样的参数(DataTable类型化,更一般地)实现为Stub初始化?我很感激任何建议和方法.谢谢
我认为问题不在于复杂的数据类型,而在于您设定的期望值.
作为修复它的第一次尝试,在IgnoreArguments()之前添加Return.可能是DataTable您在期望中指定的与实际传入的DataTable实例不同,因此期望不会通过:
...Stub(...).IgnoreArguments().Return();
如果没有帮助,您可以使用WhenCalled()手动调试它:
...Stub(...).IgnoreArguments().WhenCalled(
    mi => 
    {
        var token = mi.Arguments[0] as TokenDataType;
        var dataTable = mi.Arguments[1] as DataTable;
    }).Return();
如果这没有用,请尝试在Repeat().Any()之后添加Return(),看看它是否有效.我想如果方法被调用了几次,你可能错过了第一个返回值,但我可能错了.
如果它没有返回您期望的内容,那么存根调用和实际调用之间的参数不匹配.假设你有这样的事情:
// Set expectations
var someDataTable = new DataTable(columns, raws);
mockRepository
   .Stub(repository => repository.Find(sessionToken, dataTable))
   .Return(new DeviceTypeRepository().NewTable(false));
// Actual test
var anotherDataTable = new DataTable(columns, raws);
yourTestObject.DoSomethingThatLooksForTheDataTable(repository);
这里的事情,即使someDataTable与anotherDataTable有相同的内容,它们不是同一个对象,当RhinoMocks比较存根调用实际调用的参数不匹配.你可以做的是使用约束:
mockRepository
   .Stub(repository => repository.Find(
      Arg<SessionID>.Matches(y => y.ID == 2),
      Arg<DataTable>.Matches(x => x.Columns == columns && x.Raws == raws)
   ))
   .Return(true);
| 归档时间: | 
 | 
| 查看次数: | 10730 次 | 
| 最近记录: |