Ich versuche zu trainieren, wenn es etwas ist, was ich falsch mache, oder es ist ein Problem in moq oder NUnit. Ich rufe einen SOAP-Endpunkt an und meine Dienstreferenz generiert sowohl synchrone als auch asynchrone Methoden. Der Anruf, den ich mache, sieht ungefähr so aus:
%Vor%Ich richte meinen Moq ein, um den Rückruf zurückzugeben, damit ich die Parameter, mit denen ich den Webservice angerufen habe, einbinden kann. Mein Test sieht ungefähr so aus:
%Vor% An diesem Punkt erhalte ich eine Null-Referenz-Ausnahme, wenn ich meine Methode aufruft, die keine Informationen in der Stapel-Ablaufverfolgung enthält. Alles, was ich habe, ist Exception thrown: 'System.AggregateException' in mscorlib.dll
in der Ausgabe.
Das seltsame Bit ist, dass es nicht fehlschlägt, wenn ich den Rückruf von der synchronen Methode aus anstelle und meine Methode ändere, um das aufzurufen.
Es schlägt auch nicht fehl, wenn ich eine asynchrone Methode aufruft, die nur einen Parameter hat.
Wenn jemand Ideen hat, lassen Sie es mich bitte wissen, da ich meine Methode wegen unserer Tests nicht ändern möchte, aber idealerweise möchte ich, dass mein Test sicherstellt, dass ich den Web-Service korrekt anrufe.
Sie machen sich über ws.DoSomethingAsync()
lustig, stellen aber nichts ein, um etwas zurückzugeben. Die DoThisAsync()
-Methode wird fehlschlagen, weil sie versuchen wird, auf null zu warten. Sie können dies beheben, indem Sie Ihren Einrichtungscode in
Wenn Sie .NET 4.6 oder höher verwenden, können Sie Task.FromResult(0)
durch Task.CompletedTask
ersetzen.
Tags und Links c# nunit asynchronous moq tdd