2012-01-01 8 views
6

Silverlight Unit Test Framework tiene un atributo [asincrónico] (AsynchronousAttribute) que hace que las pruebas solo finalicen cuando se llama a EnqueueTestComplete(). Esto permite una manera simple de escribir pruebas que necesitan esperar a que ocurra un evento antes de que finalicen. Ahora estoy tratando de elegir un marco de prueba de unidad de propósito general favorito entre los que parecen ser las opciones más populares: VSUTF, NUnit, xUnit.NET, MbUnit y me preguntaba, ¿cómo harías las pruebas asincrónicas usando estos marcos?Pruebas asincrónicas en VSUTF, NUnit, xUnit.NET, MbUnit vs. SUTF?

Supongo que puedo desplegar algún código personalizado que haga Monitor.Wait o ResetEventWaitOne y lo llame al final del método de prueba, luego haga un Pulse/Set cuando la prueba termine, pero estaba buscando si hay una solución común/incorporada existente.

Esta es una muestra de cómo se hace en SUT (desde http://smartypantscoding.com/a-cheat-sheet-for-unit-testing-silverlight-apps-on-windows-phone-7).

[TestClass] 
public class AsyncTests : SilverlightTest 
{ 
    [Asynchronous] 
    [TestMethod] 
    public void AsyncAppendStringTest() 
    { 
     var appendStrings = new List<string>() { "hello", "there" }; 

     StringJoiner.AsyncAppendStringsWithDashes(appendStrings, (returnString) => 
      { 
       Assert.IsTrue(string.Compare(returnString, "hello-there") == 0); 
       EnqueueTestComplete(); 
      }); 
    } 
} 

Respuesta

1

Visual Studio ahora es compatible con las pruebas que tienen el async Task firma y las pruebas completa cuando el método asíncrono completa.