ExcludeFromCodeCoverage 不适用于 CloseAsync 方法

ExcludeFromCodeCoverage not working for CloseAsync method

我知道之前也有人问过这个问题,但是我找不到解决这个问题的方法。

我有一个 Microsoft Azure 事件中心处理器,ProcessorHost 正在实现 IEventProcessor 接口。

在这个 class 中有方法 IEventProcessor.OpenAsyncIEventProcessor.CloseAsync 和其他一些自定义方法。对于那些自定义方法,我已经使用 MSTest 编写了测试用例并且它们已经通过。

现在我已经用 [ExcludeFromCodeCoverage] 修饰了 OpenAsyncCloseAsync 方法,如下所述。

[ExcludeFromCodeCoverage]
async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)
{

}

[ExcludeFromCodeCoverage]
Task IEventProcessor.OpenAsync(PartitionContext context)
{

}

我正在使用 Sonar-cube 来测试代码覆盖率。当我运行查看代码覆盖率的报告时,它显示OpenAsync方法被覆盖,但是即使用[ExcludeFromCodeCoverage]修饰后CloseAsync方法也没有被覆盖。

所以我想知道是否需要为 CloseAsync 方法执行任何其他操作才能将其排除在代码覆盖范围之外。

编辑: closeAsync

的完整方法
async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)
{                
    if (reason == CloseReason.Shutdown)
    {
        await context.CheckpointAsync();
    }
}

SonarC# 中可能存在与此属性相关的错误。请检查:https://github.com/SonarSource/sonar-csharp/issues/1421

尝试更新到最新版本的SonarQube。

看看删除 async / await 是否有帮助。

[ExcludeFromCodeCoverage]
Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)  
    if (reason == CloseReason.Shutdown) {
        return context.CheckpointAsync();
    }
    return Task.CompletedTask;
}

这是两种方法的实现之间唯一明显的区别