Wie kann ich feststellen, Moq, um wieder eine Aufgabe?
Ich habe ein interface, welches erklärt
Task DoSomethingAsync();
Ich bin mit MoqFramework für meine tests:
[TestMethod()]
public async Task MyAsyncTest()
{
Mock<ISomeInterface> mock = new Mock<ISomeInterface>();
mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> });
...
}
Dann in meinem test habe ich den code auszuführen, die unter Berufung auf await DoSomethingAsync()
. Und der test versagt, in der Zeile. Was mache ich falsch?
Wenn Sie sagen, der test Fehler auf, dass die Linie, welche Fehler gilt es zu produzieren?
vermutlich eine NullReferenceException. wie Sie sehen können here
vermutlich eine NullReferenceException. wie Sie sehen können here
InformationsquelleAutor Waldemar | 2014-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Methode keine Rückrufe, es gibt also keinen Grund für die Verwendung
.CallBack()
. Sie können einfach wieder eine Aufgabe mit den gewünschten Werten mit.Returns()
und Aufgabe.FromResult, z.B.:Update 2014-06-22
Moq 4.2 hat zwei neue Erweiterung-Methoden, die Sie dabei unterstützen.
Update 2016-05-05
Als Seth Blumen Erwähnungen in der andere Antwort,
ReturnsAsync
ist nur für Methoden, die eineTask<T>
. Für Methoden, die nur eine Aufgabe,verwendet werden kann.
Wie gezeigt, in diese Antwort, in .NET 4.6 wird dies vereinfacht zu
.Returns(Task.CompletedTask);
, z.B.:.Zurück(Die Aufgabe.CompletedTask); das war meine Antwort
ReturnsAsync funktioniert Super.
Ich danke Ihnen für das halten dieser Antwort up-to-date als das Moq-framework-updates erhalten hat!
wie erkläre ich, in .NET 4.6
default(object)
wird nicht mehr benötigt.null as MyType
ist das gleiche wiedefault(MyType)
solangeMyType
ist ein Referenz-Typ.InformationsquelleAutor Panagiotis Kanavos
Ähnliches Problem
Habe ich eine Schnittstelle, die sah in etwa so aus:
Symptome
Mein unit-test fehlgeschlagen ist wenn mein Dienst unter test
awaited
den AufrufDoSomething
.Fix
Anders als die akzeptierte Antwort, die Sie nicht zu nennen
.ReturnsAsync()
auf IhreSetup()
dieser Methode in diesem Szenario, da die Methode gibt die nicht-generischeTask
eher alsTask<T>
.Jedoch, Sie sind noch in der Lage zu verwenden
.Returns(Task.FromResult(default(object)))
auf das setup, so dass der test zu bestehen.InformationsquelleAutor Seth Flowers
Müssen Sie nur hinzufügen
.Returns(Task.FromResult(0));
nach dem Rückruf.Beispiel:
InformationsquelleAutor Diego Torres
Nun können Sie auch Talentsoft.Moq.SetupAsync Paket
https://github.com/TalentSoft/Moq.SetupAsync
Welche auf der Basis der Antworten hier gefunden und Ideen vorgeschlagen, Moq, aber noch nicht umgesetzt, hier: https://github.com/moq/moq4/issues/384, vereinfachen die Einrichtung von asynchronen Methoden
Paar Beispiele gefunden, die in früheren Antworten gemacht mit SetupAsync Erweiterung:
InformationsquelleAutor user9812476