2016-07-05 4 views
2

Ich versuche, Test mit einer asynchronen Methode zu verspotten, aber ich weiß nicht, wie Sie den moq-Test einrichten, um es zu ermöglichen.moq testet mit einem asynchronen Vorgang funktioniert nicht

noSQLProvider.Setup(x => x.CreateDocumentAsync(It.IsIn<Uri>(), It.IsAny<object>())).Returns(); 

der Fehler sagt mir:

Verbrauch: ResourceResponse x = erwarten CreatDocumentAsync (...);

Ein Ausdrucksbaum darf keinen Aufruf oder Aufruf enthalten, der optionale Argumente verwendet.

+1

Mögliche Duplikate von [Wie mache ich Moq eine Methode, die ein optionales Argument in ihrer Signatur hat, ohne sie explizit anzugeben oder eine Überladung zu verwenden?] (Http://stackoverflow.com/questions/12957537/how-do-i- moq-a-methode-das-hat-ein-optional-argument-in-its-signature-ohne-exp – Liam

Antwort

3

Ich schätze, Sie verwenden this?

In diesem Fall wird die Fehlermeldung Ihnen ganz klar sagt, dass diese Methode optionale Parameter hat, und Sie müssen über sie sein explizite:

noSQLProvider.Setup(x => x.CreateDocumentAsync(It.IsIn<Uri>(), 
               It.IsAny<object>(), 
               It.IsAny<RequestOptions>(), 
               It.IsAny<bool>())).Returns(); 

Dies ist eine Einschränkung, die nicht auf async verwendet ist.

NB - Ich bin mir nicht sicher, wie sich It.IsAny Vergleich für Nullen verhält, also müssen Sie It.IsAny<RequestOptions>() durch etwas ersetzen, das diesen Parameter explizit als null (das ist der Standardwert) festlegt.

+0

Da bist du hier, weißt du was in das .Returns() Bit zu setzen? – Callum

+1

Was immer Sie möchten, dass Ihr Spott zurückkommt! –

+0

können Sie mir ein Beispiel geben – Callum