Il seguente xUnit.net
prova asincrona con un lambda
contrassegnati con il modificatore async
fallisce segnalando che nessun stata generata un'eccezione:Come gestire le eccezioni generate da Task in 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
}
Per assicurarsi che un ArgumentNullException
è in realtà gettato ho usato in modo esplicito un blocco try-catch
. Ha funzionato, ma il codice risultante non è pulito (rispetto alla prima prova):
[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
}
Perché la Assert.Throws<T>
con la lambda
contrassegnato con il modificatore async
fallisce?
Questo è un problema noto: http://xunit.codeplex.com/workitem/9799 – DaveShaw
1 E ' sembra essere risolto nello snapshot '03e3be9a6781' che precede lo snapshot' 16883cb2351f' dove è stata associata la versione '2.0.0-alpha'. Tuttavia, non funziona ancora dopo l'aggiornamento della soluzione con NuGet Package Manager. –