对于具有 6 个项目(类库和 wcf 服务)的 Visual Studio 解决方案,我添加了一个带有一个测试的新测试项目,其中只有一行 Assert.AreEqual(1,1)。OpenCover 显示 100% 的覆盖率(100% 序列和 100% 分支)。
OpenCover.Console.exe -target:"nunit3-console.exe" "-targetargs:Services.nunit" -register:user -skipautoprops -mergebyhash
只有当我从测试中的其他项目中实例化一个类时,覆盖率才下降到 0.1%。
所以看起来如果一个 dll 没有加载,OpenCover 就无法计算它的代码覆盖率。
现在的问题是,如果添加了一个新的类库并且它从未在单元测试中实例化,那么 OpenCover 会在计算覆盖率指标时忽略 dll。
这很重要,因为我们有一个分布式团队,开发人员可能只是创建一个类库而从不为其编写测试。它最终会出现在代码审查中,但可以配置 OpenCover 来检测这种情况。