NSubstitute无法设置返回值(CouldNotSetReturnException)

时间:2013-05-30 23:08:13

标签: c# .net unit-testing mocking nsubstitute

我有一个接口(称为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关键字有关。)

1 个答案:

答案 0 :(得分:1)

所以,这就是Stack Overflow的简化可以让你遇到麻烦的地方。

列表MyCustomReturnList实际上是一个静态类中的列表。由于传递列表作为返回值并没有实际影响类,因此未调用静态构造函数(设置列表)。

不知何故(不太确定细节),对尚未设置的列表进行“引用”是因为NSubstitute无法设置返回值(可能是因为它未初始化)。

NSubstitute唯一可以做得更好的是一个不同的错误信息。但错误出现在我的代码中,而不是NSubstitute。