2016-03-24 5 views
1

Ich verwende NUnit und NSubstitute für Komponententests. Ich habe folgende:NSubstitute kann die zu verwendenden Argumentspezifikationen nicht ermitteln

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() throws AmbiguousArgumentException mit der Meldung, dass es nicht Argument Spezifikationen bestimmen kann, zu verwenden. Ich habe folgendes auf SO

Cannot determine argument specifications to use

gefunden, die verwandt ist, aber ich kann es nicht oben im Code anzuwenden. Warum ist der obige Code mehrdeutig? Wie sonst könnte ich Received() angeben, dass es irgendein Argument akzeptieren soll?

Antwort

3

Da Sie mehrere int Parameter in der Log-Methode haben, müssen Sie die Argumentspezifikation für jede einzelne davon verwenden.

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

Danke. Ich dachte, dass Arg.Any <>() der Schuldige war, weil die Ausnahme nur ausgelöst wurde, wenn ich sie benutzte. – Drew

+0

Es ist tatsächlich. Aber das Problem liegt nicht in Arg.Any genau, aber der Typ des Parameters, den Sie Arg.Any verwendet. Da es andere Parameter desselben Typs gibt, weiß NSubstitute nicht, welche Sie Arg_Any angefordert haben. Daher müssen Sie eine Argumentspezifikation für alle Parameter desselben Typs angeben. –

Verwandte Themen