.net unit-testing asynchronous xunit.net

.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);