为啥即使单元测试全部通过,我的代码覆盖率也为零?

Posted

技术标签:

【中文标题】为啥即使单元测试全部通过,我的代码覆盖率也为零?【英文标题】:Why my code coverage is zero percent even unit test all passed?为什么即使单元测试全部通过,我的代码覆盖率也为零? 【发布时间】:2021-09-18 19:06:00 【问题描述】:

我只用一种方法创建了一个项目,并在其上编写了一个单元测试,并且单元测试在本地通过。但不知道为什么在运行声纳云扫描仪后,它显示的覆盖率为零。

这是测试类

public class DataStructureTest

    private readonly DataStructure ds;

    public DataStructureTest()
    
        ds = new DataStructure();
    

    [Theory, MemberData(nameof(LongestString_Return_Longest_String_ShouldPass_Data))]
    public void LongestString_Return_Longest_String_ShouldPass(string input, string expect)
    
        // Act
        var actual = ds.LongestString(input);

        // Assert
        Assert.Equal(expect, actual);
    

    public static TheoryData<string, string> LongestString_Return_Longest_String_ShouldPass_Data()
    
        return new TheoryData<string, string>
        
             "Hello John", "Hello" ,
             "Hi John and Mandy", "Mandy" 
        ;
    

【问题讨论】:

通过 CI 工具或 Sonarqube 等静态代码分析工具进行代码覆盖测试的问题在于 unless the information is captured(特别是在 CI 期间),您将得到 0%。我在 TeamCity 有过这种情况,并且仍然与 DevOps 相关 【参考方案1】:

您必须小心这些软件在使用某些术语时的含义。例如,SonarQube 有以下文章:https://community.sonarsource.com/t/sonarqube-and-code-coverage/4725

FAQ 的第一个问题是:

问:从 5.6 迁移到 6.7 后,我的覆盖率显示为 0%,这是为什么? R:由于 SonarQube 6.2 和 MMF-345 565 的实现,如果没有找到覆盖信息,则覆盖默认设置为零。

我认为你的案子可能属于这个。

【讨论】:

以上是关于为啥即使单元测试全部通过,我的代码覆盖率也为零?的主要内容,如果未能解决你的问题,请参考以下文章

为啥?单元测试覆盖率中显示的类即使没有添加到测试目标中

测试计划

即使我添加了测试单元,sonarqube 的覆盖率也始终为 0%

带有 jacoco 插件的 SonarQube 覆盖百分比显示为零,但可以看到单元测试的数量

为啥 codecoverage 要我覆盖定义变量?

为啥在 heightForRowAt 方法中我的单元格为零?