2016-03-24 2 views
1

Я использую NUnit и NSubstitute для модульного тестирования. У меня есть следующие:NSubstitute не может определить параметры аргументации для использования

public interface IDataProvider 
{ 
    void Log(int tvmId, DateTime time, int source, int level, int eventCode, string message); 
} 

... 

var fakeDataProvider = Substitute.For<IDataProvider>(); 
... 
fakeDataProvider.Received().Log(
    Arg.Any<int>(), 
    new DateTime(2000, 1, 1), 
    0, 
    0, 
    0, 
    null); 

fakeDataProvider.Received() кидает AmbiguousArgumentException с сообщением, что он не может определить характеристики аргументов использовать. Я нашел следующее на SO

Cannot determine argument specifications to use

, который связан, но я не могу применить его в коде выше. Почему приведенный выше код неоднозначен? Как еще я могу указать в Received(), что он должен принимать какие-либо аргументы?

ответ

3

Поскольку у вас есть несколько параметров int в методе Log, вы должны использовать спецификацию аргументов для каждого из них.

fakeDataProvider.Received().Log(
    Arg.Any<int>(), 
    new DateTime(2000, 1, 1), 
    Arg.Is(0), 
    Arg.Is(0), 
    Arg.Is(0), 
    null); 
+0

Спасибо. Я думал, что Arg.Any <>() был виновником, потому что исключение было только брошено, когда я его использовал. – Drew

+0

Это на самом деле. Но проблема не в том, что Arg.Any точно, но тип параметра вы использовали Arg.Any. Так как существуют другие параметры с одним и тем же типом, NSubstitute не знает, какой из них вы запросили как Arg.Any, поэтому вам нужно указать спецификацию аргумента для всех параметров одного типа. –

Смежные вопросы