【问题标题】:Cannot determine argument specifications to use无法确定要使用的参数规范
【发布时间】:2013-03-14 18:55:01
【问题描述】:

我在使用 NSubstitute 时遇到问题。 我有这个短代码:

ReportingCycleDeliveryRepository
.When(f => f.Add(Arg.Any<ReportingCycleDelivery>()))
.Do(x => RepCycleDeliveries.Add((ReportingCycleDelivery)x[0]));

因此,当使用任何 ReportingCycleDelivery 参数调用我的 (void) 方法 ReportingCycleDeliveryRepository.Add() 时,它应该将此项目添加到我的 RepCycleDeliveries 列表中。

但相反,它会引发异常:

NSubstitute.Exceptions.AmbiguousArgumentsException

“无法确定要使用的参数规范。 请对相同类型的所有参数使用规范。”

这是为什么呢?为什么 NSubstitute 不能确定要使用的正确参数规范?我清楚地提供了一个提示,参数可以是任何ReportingCycleDelivery 项目。

【问题讨论】:

  • Add 方法会不会有重载?
  • 嗯,我的 ReportingCycleDeliveryRepository.Add() 方法是一个泛型类型: void Add(T entity) where T : class;我想你是对的。有解决办法吗?
  • 不,泛型应该不是问题。我的意思是如果有额外的 Add 重载采用一些更通用的参数。但我猜不是:)

标签: c# mocking nsubstitute


【解决方案1】:

您应该能够将您的代码更改为以下内容,并让它按照您希望的方式工作:

ReportingCycleDeliveryRepository
    .When(f => f.Add(Arg.Do<ReportingCycleDelivery>(
        x => RepCycleDeliveries.Add(x[0])));

如果没有看到ReportingCycleDeliveryRepositoryReportingCycleDelivery 的代码,很难确切说明为什么会出现此错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多