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

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

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

我该怎么做?

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

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

【问题讨论】:

标签: .net unit-testing


【解决方案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 是如何做到的:stackoverflow.com/questions/15031681/…
【解决方案2】:

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

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

【讨论】:

  • 我不认为这是问题的答案
猜你喜欢
  • 2015-07-15
  • 1970-01-01
  • 2012-11-25
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多