2008-12-30 49 views
15

Tôi dường như không thể tìm thấy câu trả lời .NET cho vấn đề này, điều mà tôi nghĩ là khá phổ biến.
Mẫu tốt nhất để thử nghiệm đơn vị phương pháp không đồng bộ là gì? Rõ ràng tôi cần phải gọi phương pháp và sau đó xem nếu gọi lại cháy, nhưng là có một cách tốt hơn so với chỉ đơn giản là ngủ cho một chút và sau đó kiểm tra cho một lá cờ được thiết lập bởi các cuộc gọi lại không? Có phải là không? Quản lý các cờ được một chút lộn xộn, nơi có nhiều thử nghiệm đang chạy.Cách tốt nhất để kiểm tra đơn vị một phương pháp không đồng bộ là gì?

Trả lời

10

Tôi thường sử dụng một đại biểu ẩn danh và một waithandle. Ví dụ FOr Tôi có một chức năng trong người trình bày của tôi được gọi là SetRemoteTableName. Khi tên được đặt, nó cũng tăng một sự kiện. Tôi muốn kiểm tra sự kiện đó, được nâng lên không đồng bộ. Bài kiểm tra có dạng như sau:

[TestMethod] 
[WorkItem(244)] 
[Description("Ensures calling SetRemoteTableName with a valid name works 
       AND raises the RemoteTableNameChange event")] 
public void SetRemoteTableNamePositive() 
{ 
    string expected = "TestRemoteTableName"; 
    string actual = string.Empty; 

    AutoResetEvent are = new AutoResetEvent(false); 
    SQLCECollectorPresenter presenter = new SQLCECollectorPresenter(); 
    presenter.RemoteTableNameChange += new EventHandler<GenericEventArg<string>>(
    delegate(object o, GenericEventArg<string> a) 
    { 
     actual = a.Value; 
     are.Set(); 
    }); 

    presenter.SetRemoteTableName(expected); 
    Assert.IsTrue(are.WaitOne(1000, false), "Event never fired"); 
    Assert.AreEqual(actual, expected); 
} 
+0

Điều này thật tuyệt vời - cảm ơn bạn! – womp

2

Tách mã để mã bit đồng bộ được gọi bằng trình bao bọc không đồng bộ mỏng.

Sau đó, hầu hết các thử nghiệm đơn vị của bạn có thể kiểm tra mã đồng bộ.

1

có cách nào tốt hơn là chỉ đơn giản là ngủ một chút và sau đó kiểm tra cờ được đặt bằng gọi lại không?

Thay cờ bằng tay cầm chờ. Thay vì đặt cờ, hãy đặt tay cầm chờ. Thay vì ngủ và sau đó kiểm tra xem cờ đã được đặt chưa, chờ trên tay cầm chờ ... và chờ với thời gian chờ, để nếu bạn thức dậy vì hết thời gian chờ thay vì thức dậy vì tay cầm mà bạn đang đợi đã bị sa thải bằng cách gọi lại, sau đó bạn biết rằng thử nghiệm không thành công (tức là cuộc gọi lại không được gọi trong khoảng thời gian chờ).

Các vấn đề liên quan