Bagaimana seseorang menguji kode async menggunakan MSTest

92

Saya sedang menulis beberapa kode async yang sangat sederhana. Hanya menyimpan file di luar utas.

Saya ingin menguji kode ini menggunakan kerangka kerja pengujian unit MSTest di Microsoft Visual Studio Team System 2008.

Bagaimana saya melakukan ini?

Saya ingin memblokir metode pengujian secara sederhana sampai metode tersebut kembali. Saya dapat membayangkan beberapa cara untuk melakukan ini, tetapi saya terpesona tidak ada praktik terbaik atau kelas penolong di sekitar ini.

Saya melihat banyak hal untuk Silverlight, tetapi tidak ada yang umum.

Kevin Moore
sumber
4
Duplikat? stackoverflow.com/questions/1174702/… (Saya pikir jawaban yang diberikan tidak secara langsung terkait dengan kerangka pengujian mana yang digunakan)
Fredrik Mörk
1
ya itu - dan jawabannya akan sama menurut saya.
Andras Zoltan

Jawaban:

167

Visual studio 2012 (sebelumnya dikenal sebagai "Visual Studio 11") memperkenalkan dukungan untuk tes async . Ini terlihat seperti ini:

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

Sebagaimana dicatat di komentar, yang Taskkembali jenis penting . Ini tidak akan berfungsi jika Anda mendeklarasikan metode sebagai kembali void.

Wim Coenen
sumber
59
Perhatikan bahwa Tasktipe pengembalian adalah wajib - voidtidak akan berfungsi (setidaknya tidak pada pembaruan VS2013 4)
Ohad Schneider
3
(Ini tidak akan pernah berhasil, karena voidmetode -kembali async tidak dapat ditunggu)
Richard Szalay
1
@RichardSzalay: itu dapat dibuat untuk bekerja, lihat di sini bagaimana NUnit melakukannya: stackoverflow.com/questions/15031681/…
Wim Coenen
-3

Alih-alih memanggil metode System.IO secara langsung, coba gunakan pustaka SystemWrapper sebagai gantinya. Kemudian dalam pengujian Anda, Anda dapat meniru panggilan sesuai keinginan, mengembalikan apa pun yang Anda suka ke pengujian, termasuk kondisi kesalahan, dan memverifikasi bahwa logika Anda berfungsi seperti yang diharapkan.

Jika Anda ingin melihat contohnya, lihat posting blog ini yang menunjukkan bagaimana hal itu dapat digunakan dengan RhinoMocks.

Richard Banks
sumber
3
Saya tidak melihat ini sebagai jawaban untuk pertanyaan
SteveC