.net - xunit Assert.ThrowsAsync() no funciona correctamente?
unit-testing asynchronous (1)
Así que tengo una prueba como la siguiente:
[Fact]
public void Test1()
{
Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows());
}
private async Task MethodThatThrows()
{
await Task.Delay(100);
throw new NotImplementedException();
}
Para mi sorpresa, Test1 pasa con éxito. Para que falle tengo que escribir así:
Assert.Throws<ArgumentNullException>(() => MethodThatThrows().Wait());
¿Cuál es el propósito de ThrowsAsync (), si no funciona en el escenario anterior?
Se supone que debes await
el resultado (consulta las pruebas de aceptación de xunit ).
[Fact] public async Task Test1()
{
await Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows());
}
En este caso degenerado específico, simplemente podría return
la Task
que Assert.ThrowsAsync
cede sin usar await
, pero la clave es que debe devolver la Task
resultante al marco xUnit, es decir
[Fact]
public Task Test1() =>
Assert.ThrowsAsync<ArgumentNullException>(MethodThatThrows);