我有一个接口(称为IRepository
),其上有一个方法,如下所示:
IEnumerable<TEntity> ExecuteStoredProcedure<TEntity>(string functionName,
params Tuple<string, object>[] parameters);
我正在尝试设置当通过我的单元测试调用该方法时将返回的内容。像这样:
dataAccess = Substitute.For<IRepository>();
dataAccess.ExecuteStoredProcedure<MyCustomReturnType>(null, null)
.ReturnsForAnyArgs(MyCustomReturnList);
当我运行测试时,我得到了这个例外:
NSubstitute.Exceptions.CouldNotSetReturnException:找不到要返回的调用。
有关尝试使用实际课程执行此操作的消息仍然谨慎,但这不适用于我。
我尝试将null
参数更改为更真实的内容:
ExecuteStoredProcedure<MyCustomReturnType>("", new Tuple<string, object>[]{null})
但这没有帮助......
我对这个替代品做错了什么想法?
(我的猜测是它与params
关键字有关。)
答案 0 :(得分:1)
所以,这就是Stack Overflow的简化可以让你遇到麻烦的地方。
列表MyCustomReturnList
实际上是一个静态类中的列表。由于传递列表作为返回值并没有实际影响类,因此未调用静态构造函数(设置列表)。
不知何故(不太确定细节),对尚未设置的列表进行“引用”是因为NSubstitute无法设置返回值(可能是因为它未初始化)。
NSubstitute唯一可以做得更好的是一个不同的错误信息。但错误出现在我的代码中,而不是NSubstitute。