async void
las pruebas unitarias no se pueden ejecutar en Visual Studio 2012:
[TestClass]
public class MyTestClass
{
[TestMethod]
public async void InvisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
}
Si quiero tener una prueba unitaria asincrónica, el método de prueba debe devolver una Tarea:
[TestMethod]
public async Task VisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
¿Por que es esto entonces? No es que necesite absolutamente un async void
método de prueba, solo tengo curiosidad. Visual Studio 2012 no da advertencias ni errores cuando crea un async void
método de prueba aunque no se pueda ejecutar ...
async void
pruebas y cómo y por qué apoyarlas se detalla hasta cierto punto en este enlace . Vea la respuesta a continuación.Es solo porque MSTest no admite
async void
pruebas unitarias. Es posible hacerlo introduciendo un contexto en el que se puedan ejecutar.MSTest no admite esto, probablemente porque Microsoft decidió que era un cambio demasiado grande para las pruebas existentes (es posible que las pruebas existentes se bloqueen si se les diera un contexto inesperado).
No hay advertencia / error del compilador porque es un código C # perfectamente válido. La única razón por la que no funciona es debido al marco de prueba unitario (es decir, creo que xUnit sí admite
async void
pruebas), y sería una grave violación de la separación de preocupaciones que el compilador de C # mire sus atributos, lo determine está usando MSTest y decide que realmente no desea usarasync void
.fuente
Encontré en VS2015 que cualquier método de prueba decorado con async no se mostraría en el Explorador de pruebas. Terminé eliminando la palabra clave async y reemplazando la llamada en espera en la prueba con una tarea.Espere () y realicé mis asertiones en task.Result.
Parece estar funcionando bien. Todavía no lo he probado con pruebas de excepción.
var task = TheMethodIWantToTestAsync(someValue); task.Wait(); var response = task.Result; Assert.IsNotNull(response); Assert.IsTrue(response.somevalue);
fuente