Come si verifica il codice asincrono usando MSTest


88

Sto scrivendo un codice asincrono semplicissimo. Sto solo salvando un file fuori thread.

Mi piacerebbe testare questo codice utilizzando il framework di unit test MSTest in Microsoft Visual Studio Team System 2008.

Come faccio a fare questo?

Vorrei bloccare semplicemente il metodo di test fino a quando il metodo non ritorna. Posso immaginare alcuni modi per farlo, ma sono sbalordito che non ci siano best practice o classi di aiuto su questo.

Vedo molto per Silverlight, ma niente di generico.


4
Duplicare? stackoverflow.com/questions/1174702/… (Penso che le risposte fornite non siano direttamente correlate al framework di test utilizzato)
Fredrik Mörk

1
sì, lo è - e la risposta sarà la stessa, credo.
Andras Zoltan

Risposte:


162

Visual Studio 2012 (precedentemente noto come "Visual Studio 11") ha introdotto il supporto per i test asincroni . Assomiglia a questo:

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

Come notato nei commenti, il Tasktipo restituito è importante . Non funzionerà se dichiari il metodo come restituito void.


58
Nota che il Tasktipo di restituzione è obbligatorio - voidnon funzionerà (almeno non su VS2013 aggiornamento 4)
Ohad Schneider

3
(Non funzionerà mai, poiché voidnon è possibile attendere il ripristino dei metodi asincroni)
Richard Szalay

1
@RichardSzalay: può essere fatto funzionare, guarda qui come lo fa NUnit: stackoverflow.com/questions/15031681/…
Wim Coenen

-3

Invece di chiamare direttamente i metodi System.IO, prova a utilizzare la libreria SystemWrapper . Quindi nei tuoi test puoi deridere le chiamate come desideri, restituire quello che vuoi al tuo test, comprese le condizioni di errore, e verificare che la tua logica funzioni come previsto.

Se vuoi vedere un esempio, dai un'occhiata a questo post del blog che mostra come può essere utilizzato con RhinoMocks.


3
Non la vedo come una risposta alla domanda
SteveC
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.