Poniższy asynchroniczny xUnit.net
Test z lambda
oznaczonego modyfikatora async
nie zgłaszając, że żaden wyjątek:Jak obsłużyć wyjątki wyrzucane przez zadania w pliku xUnit .net's Assert.Throws <T>?
[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
}
Aby upewnić się, że ArgumentNullException
jest faktycznie rzucony jawnie użył try-catch
blok. Udało się, jednak uzyskany kod nie jest czysty (w porównaniu do pierwszego testu):
[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
}
Dlaczego Assert.Throws<T>
z lambda
oznaczone modyfikatora async
nie powiedzie?
To znany problem: http://xunit.codeplex.com/workitem/9799 – DaveShaw
+1 It wydaje się być naprawione w migawce '03e3be9a6781', która jest przed migawką' 16883cb2351f', gdzie zostało wydane wydanie '2.0.0-alpha'. Jednak nadal nie działa po zaktualizowaniu rozwiązania za pomocą NuGet Package Manager. –