单元测试async void MVC Controller方法不运行

时间:2015-10-01 15:04:03

标签: c# unit-testing

我试图通过其服务测试userController让用户异步,使测试方法无效。问题是所有事情都会编译,但测试不会运行。

[TestClass]
public class UserControllerTests
{
   [TestMethod]
   public async void UserController_GetAll_Returns_Not_Null()
   {
    var result = await controller.GetALL();

    Assert.IsNotNull(result);
   }
}

2 个答案:

答案 0 :(得分:2)

我在"亚历山大的嵌入式Techwire"这里link只是为异步任务更改了异步空白。

“async void”方法是“即发即忘”的方法,可能永远不会回来,这在测试环境中没有意义,你需要从方法中收集结果和断言。

    [TestClass]
    public class UserControllerTests
    {
       [TestMethod]
       public async Task UserController_GetAll_Returns_Not_Null()
       {
          var result = await controller.GetALL();

          Assert.IsNotNull(result);
       }
   }

答案 1 :(得分:0)

如果仔细查看输出窗口,在“测试检​​测”(或其他任何调用)下,您会看到MSTest正在向您发出警告UTA007。

相比之下,xUnit默认支持它们,而Fixie会检测它们并明确地将它们失败。

正如您所发现的,最佳解决方案是将异常async void更改为更自然async Taskasync Task适用于所有现代单元测试框架。

我在slides中有关于异步单元测试的更多详细信息,请参阅我今年在ThatConference上发表的主题。