繁体   English   中英

单元测试异步void MVC Controller方法无法运行

[英]Unit Testing async void MVC Controller methods don't run

我正在尝试测试userController,以通过其服务使用户异步,从而使测试方法无效。 事实是,所有内容都可以编译,但是测试无法运行。

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

    Assert.IsNotNull(result);
   }
}

我在“亚历山大的嵌入式Techwire”此处的链接中找到了答案,只是更改了异步任务的异步无效性。

“异步无效”方法是“即发即弃”的方法,它们可能永远不会回来,并且在需要从方法中收集结果和断言的测试环境中,这根本没有意义。

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

          Assert.IsNotNull(result);
       }
   }

如果您仔细查看输出窗口,则在“测试检​​测”(或它所称的名称)下,您会看到MSTest正在向您发出警告UTA007。

相反,xUnit默认情况下支持它们,而Fixie会检测到它们并显式地使它们失败。

如您所见,最好的解决方案是将异常async void更改为更为自然的async Task async Task可与所有现代单元测试框架一起使用。

在我的幻灯片中 ,我有更多关于异步单元测试的详细信息,这些幻灯片来自我今年在ThatConference上发表的关于该主题的演讲。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM