c# - 在异步单元测试中调用 Assert.Inconclusive() 被报告为失败

标签 c# unit-testing async-await mstest vstest

我有一系列连接到 Azure 存储模拟器的单元测试。在设置中,我的代码检查是否有东西在模拟器的端口上监听,如果没有,则设置标志 StorageNotAvailable

在我的每个测试中我都有一些代码...

if ( StorageNotAvailable )
    Assert.Inconclusive( "Storage emulator is not available" )

// where storage emulator is available, continue as normal

正如预期的那样,当测试返回 void 时,这会在测试资源管理器中正确报告为“不确定”。

当测试执行一些异步方法时,[TestMethod] 签名返回 Task,然后测试在 TestExplorer 中报告为“失败”而不是“不确定” ".

如何让异步方法报告为不确定?

编辑

可能需要一些额外的细节。以下是我用来演示我遇到的问题的一些示例测试。

[TestMethod]
public void MyTestMethod()
{
    Assert.Inconclusive( "I am inconclusive" );
}

[TestMethod]
public async Task MyTestMethodAsync()
{
    Assert.Inconclusive( "I am an error" );
}

Image of the offending code in action

Test Explorer Error

Test Explorer Inconclusive

一些环境细节也可能是有序的:

  • Windows 10 x64 1703 内部版本 15063.608
  • Visual Studio 企业版 2017 15.3.5
  • .NET 4.7.02046
  • 可能相关的 VS 扩展
    • Microsoft Visual Studio 测试平台
    • MSTest V2 创建单元测试扩展
    • MSTest V2 IntelliTest 扩展
    • MSTest V2 模板
  • 可能相关的项目引用资料
    • Microsoft.VisualStudio.TestPlatform.TestFramework v14.0.0.0
    • Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions v14.0.0.0
  • 项目可能相关的 nuGet 包
    • MSTest.TestAdapter v1.1.18
    • MSTest.TestFramework v1.1.18
  • 项目构建目标是 .NET Framework v4.7

最佳答案

Assert.Inconclusive raises a special kind of exception ,这将导致任务捕获该异常。由于 Task 库和 async 不知道,我们不能怪他们提示。 Task 框架会将异常包装在 AggregateException 中,我怀疑它正在被报告。这是一个很好的假设,但事实证明,寻找 AssetInconclusiveException 的代码正在将引发的实例与 MstestV1 的实现而不是 MsTestV2 进行比较。

但我认为这应该被视为 MsTest v2 运行器中的错误,它应该检查所有失败的任务并查看导致它们失败的异常。

该行为目前是已知行为并且I've just submitted a PR to fix this .合并请求,现在只需等待下一个 Nuget 构建触发。


此修复已合并并在 latest 1.2.0 package 中发布.

关于c# - 在异步单元测试中调用 Assert.Inconclusive() 被报告为失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46390905/

相关文章:

c# - 在 C# 中获取图形的 Y 值

c# - 如何获得有关 CQRS 更改的即时反馈

unit-testing - angular2 测试,如何模拟子组件

javascript - Objection.js 中的异步 $formatDatabaseJson

c# - 通过windows服务打开浏览器渲染和截图selenium .Net中的webgl页面

c# - 设置标题的 MaxWidth 后,对所有 DataGridColumns 应用相同的高度

c# - 单元测试 : How to check if generated javascript (string) is valid javascript

iOS - UIViewController 中的依赖注入(inject)

c# - View 模型中的异步方法 : should this return Task or void?

node.js - 使用异步请求