我有一系列连接到 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" );
}
一些环境细节也可能是有序的:
- 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/