如何使用MSTest测试异步代码


87

我正在写一些超级简单的异步代码。只是将文件保存在线程外。

我想使用Microsoft Visual Studio Team System 2008中的MSTest单元测试框架来测试此代码。

我该怎么做呢?

我想简单地阻塞测试方法,直到方法返回。我可以想象有一些方法可以做到这一点,但我为此感到震惊,没有任何最佳实践或帮助程序类。

我对Silverlight看到了很多,但没有什么通用的。


4
重复?stackoverflow.com/questions/1174702/…(我认为所提供的答案与所使用的测试框架没有直接关系)
FredrikMörk2010年

1
是的,答案是一样的,我想。
安德拉斯·佐尔坦

Answers:


160

Visual Studio 2012(以前称为“ Visual Studio 11”)引入了对异步测试的支持。看起来像这样:

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

正如评论指出,Task返回类型是非常重要的。如果将方法声明为returning,则将无法正常工作void


58
请注意,Task返回类型是强制性的-void无效(至少在VS2013 Update 4上无效)
Ohad Schneider

3
(它将永远无法正常工作,因为 void无法等待返回的异步方法)
Richard

1
@RichardSzalay:它可以工作进行,看到这里NUnit的是如何做的:stackoverflow.com/questions/15031681/...
维姆科嫩

-3

与其直接调用System.IO方法,不如尝试使用SystemWrapper库。然后,在测试中,您可以根据需要模拟调用,将您喜欢的任何内容(包括错误条件)返回到测试中,并验证逻辑是否按预期工作。

如果您想查看示例,请查看此博客文章,其中显示了如何将其与RhinoMocks结合使用。


3
我不认为这是问题的答案
SteveC '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.