Der folgende asynchrone xUnit.net
Test mit einem lambda
mit dem Modifikator nicht async
gekennzeichnet durch die Berichterstattung, dass keine Ausnahme ausgelöst wurde:Wie behandelt man Ausnahmen, die von Tasks in xUnit .nets Assert.Throws <T> ausgelöst werden?
[Theory, AutoWebData]
public async Task SearchWithNullQueryThrows(
SearchService sut,
CancellationToken dummyToken)
{
// Fixture setup
// Exercise system and verify outcome
Assert.Throws<ArgumentNullException>(async() =>
await sut.SearchAsync(null, dummyToken));
// Teardown
}
Um sicherzustellen, dass ein ArgumentNullException
ich explizit einen try-catch
Block verwendete tatsächlich geworfen wird. Es funktionierte, aber der resultierende Code nicht sauber ist (im Vergleich zum ersten Test):
[Theory, AutoWebData]
public async Task SearchWithNullQueryThrows(
SearchService sut,
CancellationToken dummyToken)
{
// Fixture setup
var expected = typeof(ArgumentNullException);
Type actual = null;
// Exercise system
try
{
await sut.SearchAsync(null, dummyToken);
}
catch (ArgumentNullException e)
{
actual = e.GetType();
}
// Verify outcome
Assert.Equal(expected, actual);
// Teardown
}
Warum die Assert.Throws<T>
mit den lambda
schlägt mit dem async
Modifikator markiert?
Dies ist ein bekanntes Problem: http://xunit.codeplex.com/workitem/9799 – DaveShaw
+1 Es scheint in Snapshot '03e3be9a6781' behoben zu sein, der vor dem Snapshot' 16883cb2351f' liegt, wo Release '2.0.0-alpha' zugeordnet wurde. Nach dem Aktualisieren der Lösung mit NuGet Package Manager funktioniert es jedoch immer noch nicht. –