当我尝试做 clover:merge;由此产生的三叶草覆盖率列为 0%

When I attempt to do a clover:merge; the resulting clover coverage is listed at 0%

我有两个 clover.db 文件;这些 clover.db 个文件是在两个不同的时间创建的;但是底层(检测过的)代码根本没有改变;我只是编译了两次;创建了两个单独的 WAR 文件;并将这两个单独的 WAR 文件和 clover.db 复制到两个单独的服务器。

在对这两个部署的服务器执行不同的测试之后;并收集了 clover.db* 文件。

我 运行 maven 使用 mvn clover2:aggregate clover2:clover <options> 并为每个单独的服务器生成了两组三叶草覆盖文件。它们产生了一定百分比的覆盖率(在本例中为 14% 和 19%)

现在,我想将这两个合并为一个报告;但我似乎不知道该怎么做;正如我尝试的每一种方式(在下面列出)一样,我最终得到 0% 的覆盖率或来自单个服务器的覆盖率(正确填写了 clover 的代码指标)。

以下是我尝试过的各种方法和结果:

  1. 从一台服务器复制 clover.db,从两台服务器复制 clover.db* 文件,以及 运行 mvn clover2:aggregate clover2:clover <options>。这导致仅显示来自两个服务器之一的覆盖范围(以初始 clover.db 所属的那个为准)。

  2. 将两台服务器的 clover.db 复制到一个单独的位置(将 .db 文件重命名为唯一的名称)。 运行 mvn clover2:aggregate clover2:merge <options>。这会产生一个合并的 .db 文件(据我所知)。然后,我将该合并的 .db 文件用作 clover.db 文件;从两个服务器复制 clover.db* 文件,然后 运行 mvn clover2:aggregate clover2:clover <options>。我在 pom.xml 文件中使用以下内容来指示此合并:

    <cloverMergeDatabase>/tmp/clover/Merged/newMerge.db</cloverMergeDatabase>
    <baseDir>/tmp/clover/Merged</baseDir>
    

在此之后,我将新创建的 newMerge.db 复制到 mvn 期望 clover.db 文件所在的位置(并将其重命名为 clover.db,因为是 mvn 所期待的)。这是我运行时的聚合命令。这导致显示 0% 的覆盖率(生成文件,但绝对没有指示覆盖率)。

正如您从所附图片中看到的那样,文件正在正确创建,只是实际上没有找到任何覆盖范围。第一张照片是我做#1 的时候:

第二个是我做 #2 的时候:

希望我已经解释了我面临的问题;但如果你认为你可以提供帮助但不理解我说的某些问题,请提出问题。这让我很烦恼!

合并首先查找 Clover 数据库。然后它查找与数据库匹配的覆盖文件,并将 db 文件名与覆盖文件名匹配。因此,例如,如果 db 被命名为 clover.db 它将找到所有匹配该名称的覆盖文件,例如 clover.db* (或类比 cloverdatabase -> cloverdatabase* <- coverage files)

在第一步中,Clover 很可能会找到所有覆盖文件,但从第二台服务器复制的文件与 clover.db 不匹配,因此被丢弃。 (Clover 保存有关检测和测试执行会话的信息。一些元数据必须匹配)

在第二步中,当您重命名第二个数据库时,所有覆盖率文件都与第一个数据库匹配(因为名称冲突),然后其中一半被丢弃,因为元数据不匹配(与第一步相同的机制)。由于您已重命名第二个数据库,Clover 找不到该数据库的任何覆盖文件。

我不能做到 100%,但仅仅重命名文件可能还不够您不能简单地重命名文件。

我建议生成具有唯一名称的数据库,例如 cloverWAR1.db、cloverWAR2.db。然后 运行 测试,将 dbs 复制到报告机器以进行聚合和报告生成。你应该使用 cloverDatabase 属性, like this。在测试 运行 期间,您可能必须使用 initstring 属性 指定数据库的位置。那是因为它不是默认名称,Clover 将无法自动找到它。