我在代码库中进行了一些 junit 测试,发现 Intellij 将我所有的简单 Record 类标记为 0% 覆盖率
我有一个简单的记录,如下所示:
public record ProcessRequestDTO(String path) {
// NOTHING HERE
}
我的问题是,Intellij 报道希望我在这里介绍什么?构造函数?获取器/设置器?如果后者是真的,为什么用 @Getter、@Setter、@AllArgsConstrusctor 注释的非记录类甚至没有被检测到被覆盖? (见下一个代码)
我现在无法使用 jacoco,所以我期待默认 Intellij 覆盖工具的答案。
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Other{
private File file;
}
// This class is not even added to the coverage pool
TLDR;运行 jacoco 时,似乎您需要调用构造函数和 getters 才能覆盖记录声明。我怀疑 IntelliJ 也有同样的期望,因为两者都依赖于字节码检测。
我创建了一个简单的记录:
public record Foo (String bar) {}
然后创建了一个测试用例,我在其中调用了构造函数和 getter:
assertThat(new Foo("Test").test()).isEqualTo("Test");
然后我使用 mvn 和
jacoco-maven-plugin:0.8.11
运行测试:
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent test org.jacoco:jacoco-maven-plugin:report
然后我使用 Run - Show Coverage Data... 打开结果,并选择生成的
jacoco.exec
文件。它显示 Foo
类覆盖 100%。