Ric*_*uer 5 c# unit-testing mstest async-await vstest
我有一系列连接到Azure存储模拟器的单元测试.在安装程序中,我的代码检查模拟器的端口是否有监听,如果没有设置标志StorageNotAvailable.
在我的每个测试中,我都有一些代码......
if ( StorageNotAvailable )
Assert.Inconclusive( "Storage emulator is not available" )
// where storage emulator is available, continue as normal
Run Code Online (Sandbox Code Playgroud)
正如所料,当测试返回时,void它在测试资源管理器中正确报告为"不确定".
当测试运行一些异步方法,并且[TestMethod]签名返回时Task,测试将在TestExplorer中报告为"失败"而不是"不确定".
如何让异步方法报告为不确定?
可能需要一些额外的细节.以下是我为了证明我所看到的问题而进行的一些示例测试.
[TestMethod]
public void MyTestMethod()
{
Assert.Inconclusive( "I am inconclusive" );
}
[TestMethod]
public async Task MyTestMethodAsync()
{
Assert.Inconclusive( "I am an error" );
}
Run Code Online (Sandbox Code Playgroud)
一些环境细节也可能是有序的:
Assert.Inconclusive引发一种特殊的异常,这将导致任务捕获该异常.由于Task库和async不知道,我们不能责怪他们抱怨.Task框架会将异常包装在AggregateException中,我怀疑这个异常会被报告.这是一个很好的假设,但事实证明,寻找AssetInconclusiveException的代码是将引发的实例与MstestV1的实现进行比较而不是MsTestV2.
但我想这应该被认为是MsTest v2运行器中的一个错误,它应该检查所有失败的任务并查看导致失败的异常.
行为是目前已知的行为,我刚刚提交了一个PR来解决这个问题.Pull Request Merged,现在只是等待下一个Nuget构建触发.