【发布时间】:2018-12-07 01:24:17
【问题描述】:
我知道以前也有人问过这个问题,但我找不到任何解决方案。
我有一个 Microsoft Azure 事件中心处理器 ProcessorHost,它正在实现 IEventProcessor 接口。
它有方法IEventProcessor.OpenAsync、IEventProcessor.CloseAsync 和这个类中的一些其他自定义方法。对于那些自定义方法,我已经使用 MSTest 编写了测试用例并且它们已经通过了。
现在我用[ExcludeFromCodeCoverage] 装饰了OpenAsync 和CloseAsync 方法,如下所述。
[ExcludeFromCodeCoverage]
async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)
{
}
[ExcludeFromCodeCoverage]
Task IEventProcessor.OpenAsync(PartitionContext context)
{
}
我正在使用 Sonar-cube 来测试代码覆盖率。当我运行报告查看代码覆盖率时,它显示OpenAsync 方法被覆盖,但CloseAsync 方法即使在使用[ExcludeFromCodeCoverage] 装饰后也没有被覆盖。
所以我想知道为了将 CloseAsync 方法排除在代码覆盖范围之外还需要做些什么。
编辑: closeAsync的完整方法
async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)
{
if (reason == CloseReason.Shutdown)
{
await context.CheckpointAsync();
}
}
【问题讨论】:
-
只是出于好奇你试过装饰整个班级吗?
-
@MihirDave 是的,我试过了。它排除了整个类,代码覆盖率显示为 100%。问题是当我装饰单个方法时。此外,它仅对 CloseAsync 方法有问题。其余所有方法都按预期正常工作。
-
@CrazyCoder 只是为了解决问题,您是否调查过是否是因为
async Task?看看你是否可以将方法重构为只返回Task以查看假设是否正确。 -
@Nkosi 我试图重构我的代码,但无法做到。我已经编辑了我的问题以添加该方法的完整代码。如果有人可以帮我重构它,那就太好了。谢谢!
-
@CrazyCoder 我的意思是现在只返回一个已完成的任务并删除异步并等待以查看是否会包含该方法。如果是他们,我们可以看到重构方法。
标签: c# sonarqube code-coverage mstest azure-eventhub