Невозможно определить спецификации аргументов для использования

У меня проблема с NSubstitute. У меня есть этот короткий код:

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

Поэтому, когда мой (void) метод ReportingCycleDeliveryRepository.Add() вызывается с любым аргументом ReportingCycleDelivery, он должен добавить этот элемент в мой RepCycleDeliveries список.

Но вместо этого выдается исключение:

NSubstitute.Exceptions.AmbiguousArgumentsException

«Невозможно определить спецификации аргументов для использования. Используйте спецификации для всех аргументов одного типа».

Это почему? Почему NSubstitute не может определить правильные спецификации аргументов для использования? Я четко намекаю, что аргументом может быть любой ReportingCycleDelivery элемент.


person Tomasz Sikora    schedule 14.03.2013    source источник
comment
Возможны ли перегрузки метода Add?   -  person Peter Lillevold    schedule 14.03.2013
comment
хм, мой метод ReportingCycleDeliveryRepository.Add () является универсальным типом: void Add ‹T› (T entity), где T: class; Я думаю, вы правы. Есть решение?   -  person Tomasz Sikora    schedule 14.03.2013
comment
Нет, дженерики не должны быть проблемой. Я имел в виду, что были дополнительные перегрузки Add, принимающие какой-то более общий параметр. Но я думаю, что нет :)   -  person Peter Lillevold    schedule 14.03.2013


Ответы (1)


Вы должны иметь возможность изменить свой код на следующий, и он будет работать так, как вы хотите:

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

Трудно точно сказать, почему вы можете получить эту ошибку, не увидев кода для ReportingCycleDeliveryRepository и ReportingCycleDelivery.

person Ryan Gates    schedule 14.03.2013