Làm cách nào để kiểm tra mã không đồng bộ bằng MSTest


88

Tôi đang viết một số mã không đồng bộ siêu đơn giản. Chỉ cần lưu một tệp ngoài luồng.

Tôi muốn kiểm tra mã này bằng cách sử dụng khung kiểm tra đơn vị MSTest trong Microsoft Visual Studio Team System 2008.

Làm thế nào để tôi làm điều này?

Tôi muốn đơn giản chặn phương thức kiểm tra cho đến khi phương thức trả về. Tôi có thể hình dung ra một số cách để làm điều này, nhưng tôi bị thất vọng vì không có bất kỳ phương pháp hay nhất nào hoặc lớp trợ giúp nào xung quanh việc này.

Tôi thấy rất nhiều cho Silverlight, nhưng không có gì chung chung.


4
Bản sao? stackoverflow.com/questions/1174702/... (Tôi nghĩ rằng câu trả lời cung cấp không liên quan trực tiếp đến đó kiểm tra khuôn khổ được sử dụng)
Fredrik Mork

1
đúng là như vậy - và câu trả lời sẽ giống như tôi nghĩ.
Andras Zoltan

Câu trả lời:


162

Visual studio 2012 (trước đây được gọi là "Visual Studio 11") đã giới thiệu hỗ trợ cho các bài kiểm tra không đồng bộ . Nó trông như thế này:

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

Như đã đề cập trong các ý kiến, các Taskkiểu trả về là rất quan trọng . Nó sẽ không hoạt động nếu bạn khai báo phương thức là trả về void.


58
Lưu ý rằng các Taskkiểu trả về là bắt buộc - voidsẽ không làm việc (ít nhất là không phải trên VS2013 cập nhật 4)
Ohad Schneider

3
(Nó sẽ không bao giờ làm việc, kể từ void-returning phương pháp async không thể chờ đợi)
Richard Szalay

1
@RichardSzalay: nó có thể hoạt động được, hãy xem tại đây cách NUnit thực hiện: stackoverflow.com/questions/15031681/…
Wim Coenen

-3

Thay vì gọi trực tiếp các phương thức System.IO, hãy thử sử dụng thư viện SystemWrapper . Sau đó, trong các bài kiểm tra của mình, bạn có thể mô phỏng các cuộc gọi như bạn muốn, trả lại bất kỳ thứ gì bạn muốn trở lại bài kiểm tra của mình, bao gồm cả các điều kiện lỗi và xác minh rằng logic của bạn hoạt động như mong đợi.

Nếu bạn muốn xem một ví dụ, hãy xem bài đăng trên blog này cho biết cách nó có thể được sử dụng với RhinoMocks.


3
Tôi không coi đây là một câu trả lời cho câu hỏi
SteveC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.