async void
Unit-Tests können in Visual Studio 2012 nicht ausgeführt werden:
[TestClass]
public class MyTestClass
{
[TestMethod]
public async void InvisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
}
Wenn ich einen asynchronen Komponententest durchführen möchte, muss die Testmethode eine Aufgabe zurückgeben:
[TestMethod]
public async Task VisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
Wieso ist es so? Nicht dass ich unbedingt eine async void
Testmethode brauche , ich bin nur neugierig. Visual Studio 2012 gibt keine Warnung oder Fehler aus, wenn Sie eine async void
Testmethode erstellen , obwohl diese nicht ausgeführt werden kann ...
async void
Tests und wie und warum es unterstützt wird, wird in diesem Link ausführlich beschrieben . Siehe Antwort unten.Dies liegt nur daran, dass MSTest keine Komponententests unterstützt
async void
. Dies ist möglich , indem ein Kontext eingeführt wird, in dem sie ausgeführt werden können.MSTest unterstützt dies nicht, wahrscheinlich weil Microsoft entschieden hat, dass es sich um eine zu große Änderung für vorhandene Tests handelt (es ist möglich, dass vorhandene Tests blockieren, wenn ihnen ein unerwarteter Kontext zugewiesen wird).
Es gibt keine Compiler-Warnung / Fehler, da es sich um einen vollkommen gültigen C # -Code handelt. Der einzige Grund, warum es nicht funktioniert, ist das Unit-Test-Framework (dh ich glaube, dass xUnit
async void
Tests unterstützt), und es wäre eine grobe Verletzung der Trennung von Bedenken, wenn der C # -Compiler Ihre Attribute überprüft und Sie bestimmt verwenden MSTest und entscheiden, dass Sie wirklich nicht verwenden wolltenasync void
.quelle
Ich habe in VS2015 festgestellt, dass mit Async dekorierte Testmethoden im Test Explorer nicht angezeigt werden. Am Ende entfernte ich das asynchrone Schlüsselwort und ersetzte den erwarteten Aufruf im Test durch eine task.Wait () und machte meine Aussagen zu task.Result.
Scheint in Ordnung zu sein. Ich habe es noch nicht mit Ausnahmetests versucht.
var task = TheMethodIWantToTestAsync(someValue); task.Wait(); var response = task.Result; Assert.IsNotNull(response); Assert.IsTrue(response.somevalue);
quelle