2010-01-13 8 views
42

Estoy escribiendo un código asíncrono muy simple. Solo guardando un archivo fuera de hilo.¿Cómo se prueba un código asíncrono usando MSTest?

me gustaría probar este código utilizando el marco de prueba de unidad MSTest en Microsoft Visual Studio Team System 2008.

¿Cómo se hace esto?

Me gustaría bloquear simplemente el método de prueba hasta que regrese el método. Me puedo imaginar algunas formas de hacerlo, pero estoy impresionado de que no haya mejores prácticas o clases de ayuda al respecto.

Veo mucho para Silverlight, pero nada genérico.

+4

¿Duplicado? http://stackoverflow.com/questions/1174702/is-there-a-way-to-unit-test-an-async-method (creo que las respuestas proporcionadas no están directamente relacionadas con el marco de prueba que se utiliza) –

+1

sí lo es, y la respuesta será la misma, creo. –

Respuesta

80

Visual Studio 2012 (anteriormente conocido como "Visual Studio 11") introduced support for async tests. Se ve así:

[TestMethod] 
public async Task FooTest() 
{ 
    var result = await SomeAsyncOperation(); 
    Assert.IsTrue(someCondition); 
} 
+36

Tenga en cuenta que el tipo de devolución 'Tarea' es obligatorio -' void' no funcionará (al menos no en la actualización VS2013 4) –

+3

(Nunca funcionará, ya que no se pueden esperar los métodos asíncronos 'void'-return) –

+0

@RichardSzalay : se puede hacer que funcione, consulte aquí cómo lo hace NUnit: https://stackoverflow.com/questions/15031681/how-does-nunit-successfully-wait-for-async-void-methods-to-complete –

1

En lugar de llamar directamente a los métodos System.IO, intente utilizar la biblioteca SystemWrapper en su lugar. Luego, en sus pruebas, puede simular las llamadas como lo desee, devolver lo que quiera a su prueba, incluidas las condiciones de error, y verificar que su lógica funcione como se espera.

Si quiere ver un ejemplo, eche un vistazo a this blog post que muestra cómo se puede usar con RhinoMocks.

Cuestiones relacionadas