如何使用 MSTest 测试异步代码

Posted

技术标签:

【中文标题】如何使用 MSTest 测试异步代码【英文标题】:How does one test async code using MSTest 【发布时间】:2011-01-04 20:45:37 【问题描述】:

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

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

我该怎么做?

我想简单地阻塞测试方法,直到方法返回。我可以想出一些方法来做到这一点,但令我震惊的是,没有任何最佳实践或帮助类。

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

【问题讨论】:

重复? ***.com/questions/1174702/…(我认为提供的答案与使用的测试框架没有直接关系) 是的,我想答案是一样的。 【参考方案1】:

Visual Studio 2012(以前称为“Visual Studio 11”)introduced support for async tests。它看起来像这样:

[TestMethod]
public async Task FooTest()

   var result = await SomeAsyncOperation();
   Assert.IsTrue(someCondition);

如 cmets 中所述,Task 返回类型很重要。如果将方法声明为返回void,它将不起作用。

【讨论】:

请注意,Task 返回类型是强制性的 - void 不起作用(至少在 VS2013 更新 4 上不起作用) (它永远不会起作用,因为无法等待void-returning async 方法) @RichardSzalay:可以让它工作,在这里看看 NUnit 是如何做到的:***.com/questions/15031681/…【参考方案2】:

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

如果您想查看示例,请查看 this blog post,了解它如何与 RhinoMocks 一起使用。

【讨论】:

我不认为这是问题的答案

以上是关于如何使用 MSTest 测试异步代码的主要内容,如果未能解决你的问题,请参考以下文章

VS2010 中的 MSTest - 如何一步启动所有负载测试

如何从 MSTest 对站点进行灯塔审计

在新的应用程序域中运行时,如何将标准输出转换为 mstest 输出?

如何并行运行单元测试(MSTest)?

如何在 Visual Studio 2008 中分析 MsTest 的单元测试?

我们如何在 MSTest 中运行具有多个参数的测试方法?