0

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

4

1 回答 1

1

因此,这就是 Stack Overflow 的简化可能会给您带来麻烦的地方。

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

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

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

于 2013-05-31T17:01:13.433 回答