【问题标题】:ExcludeFromCodeCoverage not working for CloseAsync methodExcludeFromCodeCoverage 不适用于 CloseAsync 方法
【发布时间】:2018-12-07 01:24:17
【问题描述】:

我知道以前也有人问过这个问题,但我找不到任何解决方案。

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

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

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

[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


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我已经尝试过了,它奏效了。但我想知道这是否是正确的方法。我的意思是,如果我们出于测试用例的目的更改代码,它会影响应用程序的实际工作吗?无论如何我都会测试,但只是想知道这样更改是否有任何问题。
  • @CrazyCoder 像这样更改代码不会影响它以前的工作方式。像这样改变是没有问题的。这就像前面的代码一样工作。只是语法不同。问题似乎与[ExcludeFromCodeCoverage] 无法识别async 任务有关。可能是框架问题,建议与代码维护者一起提出。
【解决方案2】:

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

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

【讨论】:

  • 我使用的是 Sonarqube 7.1 。但现在我也尝试了 7.2 社区版本。还是同样的问题。
猜你喜欢
  • 2023-03-24
  • 2011-06-15
  • 1970-01-01
  • 2014-07-21
  • 2018-03-29
  • 2011-12-06
  • 2018-12-28
  • 2016-12-05
相关资源
最近更新 更多