Mögliche Duplizieren:
How do I test an async method with NUnit, eventually with another framework?Wie kann ich feststellen, dass eine C# async-Methode in einem Komponententest eine Ausnahme auslöst?
Was ich möchte, ist wissen, wie ich behaupten kann, dass eine asynchrone Methode eine Ausnahme auslöst, in einer C# Unit-Test? Ich bin in der Lage, asynchrone Einheitentests mit Microsoft.VisualStudio.TestTools.UnitTesting
in Visual Studio 2012 zu schreiben, aber habe nicht herausgefunden, wie man auf Ausnahmen prüft. Ich weiß, dass xUnit.net auf diese Weise auch asynchrone Testmethoden unterstützt, obwohl ich dieses Framework noch nicht ausprobiert habe.
Ein Beispiel dessen, was ich meine, definiert der folgende Code das System im Test:
using System;
using System.Threading.Tasks;
public class AsyncClass
{
public AsyncClass() { }
public Task<int> GetIntAsync()
{
throw new NotImplementedException();
}
}
Dieser Code-Schnipsel definiert einen Test TestGetIntAsync
für AsyncClass.GetIntAsync
. Dies ist, wo ich brauche Eingang, wie die Behauptung zu erreichen, dass GetIntAsync
eine Ausnahme auslöst:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;
[TestClass]
public class TestAsyncClass
{
[TestMethod]
public async Task TestGetIntAsync()
{
var obj = new AsyncClass();
// How do I assert that an exception is thrown?
var rslt = await obj.GetIntAsync();
}
}
Fühlen Sie sich frei einen anderen relevanten Unit-Test-Framework als die Visual Studio ein, wie xUnit.net zu verwenden, falls dies notwendig oder Sie würden argumentieren, dass es eine bessere Option ist.
@JonSkeet Nicht wirklich, da dies speziell im Begriff ist, Ausnahmen zu prüfen. Obwohl ich jetzt sehe, macht es keinen Unterschied mit dem Visual Studio Framework. Für xUnit.net bin ich jedoch immer noch nicht sicher, wie es geht. – aknuds1
@JonSkeet Anfangs stimmte ich zu, aber jetzt nicht. Wenn diese Frage insofern richtig ist, als Microsofts Unit-Tests bereits Async-Tests unterstützen, trifft Ihre Antwort auf diese andere Frage hier nicht wirklich zu. Das einzige Problem besteht darin, den Test so umzuschreiben, dass er auf eine Ausnahme testet. – hvd
@hvd: In diesem Fall klingt es so, als ob das Problem * nichts * mit Asynchronität zu tun hat - sicherlich hängen die gegebenen Antworten nicht wirklich vom asynchronen Teil ab. –