如何使用 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 输出?