MSTest kullanarak zaman uyumsuz kod nasıl test edilir?


92

Süper basit bir zaman uyumsuz kod yazıyorum. Sadece bir dosyayı iş parçacığı dışında kaydetmek.

Bu kodu Microsoft Visual Studio Team System 2008'de MSTest birim testi çerçevesini kullanarak test etmek istiyorum.

Bunu nasıl yaparım?

Yöntem geri dönene kadar test yöntemini basitçe engellemek istiyorum. Bunu yapmanın bazı yollarını hayal edebiliyorum, ancak bunun etrafında en iyi uygulamalar veya yardımcı sınıflar olmadığı için şaşırdım.

Silverlight için çok şey görüyorum , ancak genel bir şey yok.


4
Çiftleme? stackoverflow.com/questions/1174702/… (Sağlanan yanıtların, kullanılan test çerçevesiyle doğrudan ilişkili olmadığını düşünüyorum)
Fredrik Mörk

1
evet öyle - ve sanırım cevap aynı olacak.
Andras Zoltan

Yanıtlar:


167

Visual studio 2012 (daha önce "Visual Studio 11" olarak biliniyordu) zaman uyumsuz testler için destek sunuldu . Şöyle görünüyor:

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

Yorumlarda belirtildiği gibi , Taskdönüş türü önemlidir . Yöntemin geri döndüğünü bildirirseniz işe yaramaz void.


59
TaskDönüş türünün zorunlu olduğunu unutmayın - voidçalışmaz (en azından VS2013 güncelleme 4'te değil)
Ohad Schneider

3
(O zamandan beri, asla işe yaramayacak voidzaman uyumsuz yöntemleri -returning beklenen olamaz)
Richard SZALAY

1
@RichardSzalay: Çalışması sağlanabilir, NUnit'in bunu nasıl yaptığına bakın: stackoverflow.com/questions/15031681/…
Wim Coenen

-3

System.IO yöntemlerini doğrudan çağırmak yerine SystemWrapper kitaplığını kullanmayı deneyin . Daha sonra testlerinizde istediğiniz gibi çağrıları alay edebilir, hata durumları dahil olmak üzere istediğinizi testinize geri döndürebilir ve mantığınızın beklendiği gibi çalıştığını doğrulayabilirsiniz.

Bir örnek görmek isterseniz , RhinoMocks ile nasıl kullanılabileceğini gösteren bu blog gönderisine bir göz atın .


3
Bunu sorunun cevabı olarak görmüyorum
SteveC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.