gpt4 book ai didi

mocking - RhinoMock : How to Stub and Return a method with complex object as parameter

转载 作者:行者123 更新时间:2023-12-02 14:22:41 24 4
gpt4 key购买 nike

我非常感谢任何人可以帮助我解决以下问题:我一直在单元测试中使用RhinoMock。我以这种方式定义我的模拟对象,sessionToken 是字符串类型的:

mockRepository.Stub(repository => repository.FindById(sessionToken)).Return(new DeviceTypeRepository().NewTable(false));

调用FindById()时代码部分可以返回valid new new DeviceTypeRepository().NewTable(false);

但是,当将复杂参数作为对象(例如 DataTable)包含到 Stub 中时,如下所示:

mockRepository.Stub(repository => repository.Find(sessionToken, dataTable)).Return(new DeviceTypeRepository().NewTable(false));

然后,调用 Find() 的代码部分,它返回预期的 new DeviceTypeRepository().NewTable(false)。请注意,参数 dataTable 的输入值在 Stub 和 Find() 调用中是相同的。

因此,我的问题是:如何使用 RhinoMock 将此类参数(DataTable 类型和更一般的参数)实现到 stub 初始化中?我将不胜感激任何建议和方法。谢谢

最佳答案

我相信问题不在于复杂的数据类型,而在于您设定的期望。

作为修复此问题的第一次尝试,请在 Return 之前添加 IgnoreArguments()。您在期望中指定的 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();

如果这没有帮助,请尝试在 Return() 之后添加 Repeat().Any() 并查看是否有效。我假设如果该方法被调用几次,您可能会错过第一个返回值,但我可能是错的。

关于mocking - RhinoMock : How to Stub and Return a method with complex object as parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7764068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com