java记录中需要涵盖哪些内容

问题描述 投票:0回答:1

我在代码库中进行了一些 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

编辑,由于这个主题不清楚,我添加了这个图像,它代表标记为“没有什么可覆盖”的类和标记为“此处有可能覆盖”的类

java intellij-idea code-coverage record java-17
1个回答
0
投票

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%。

© www.soinside.com 2019 - 2024. All rights reserved.