IntelliJ IDEA:忽略代码覆盖率中的琐碎方法

在 IntelliJ IDEA 15.0.2 中,如何在测试覆盖率测量期间忽略琐碎的 getter 和 setters(琐碎的方法)?

// should be measure
public void complex() {
    fancy();
    interesting();
    dropDatabase();
}

// should not be measured
public int getNumber() {
    return this.number;
}

测量每条线将产生75%。仅测量上述方法即可获得100%。这些是100%对测试有用的代码。

为什么我在互联网上找不到任何关于此的内容?我是否陷入了不良做法?


更新

此代码也有资格进行测试:

// should also be tested as it contains logic
public Integer getValidationProgress() {
    if (validationProgress == null) {
        validationProgress = 0;
    }
    return validationProgress;
}

答案 1

JetBrains告诉我,目前这是不可能的

安德烈·德尔诺夫 (IntelliJ) 一月 6, 22:54

你好迈克尔,

没有忽略某种方法的设置。

我为此创建了一个问题


答案 2

仍然没有办法做到这一点,这是一件好事。我理解你的痛苦,我也感受到了。

让我们假设您有一个应用程序,如果不是这些平凡的 setter 和 getter,它将具有 100% 的代码覆盖率。这意味着除了平凡的 setter 和 getter 之外,所有代码都通过测试套件进行练习。

这就提出了一个问题,为什么这些琐碎的方法首先存在。如果运行所有代码并且未调用这些方法,则100%覆盖率是肤浅的。运行所有代码,但并非所有用例都经过测试。这就是代码覆盖率具有欺骗性的确切原因。

有以下几种情况:

  1. 这些方法永远不会在任何地方调用,因此应将其删除。
  2. 这些方法在某个地方调用,但您没有测试这些用例。在这种情况下,覆盖率低于100%。
  3. 这些方法之所以存在,是因为框架需要它们。在这种情况下,这些方法是直接与框架集成的代码的一部分,因此无论如何都应与代码的其余部分分开。
  4. 就像#3,但你不能分开代码,因为框架是愚蠢的。这可能是抑制某些方法覆盖范围的有效案例,但是有了这样的框架,您可能永远不会达到可接受的覆盖范围。
  5. 这种情况是我感到痛苦的:toString()实现的唯一原因是测试失败的可读性更好。只有在测试失败时才执行这些方法。只要测试套件是绿色的,它们就永远不会被覆盖。*耸耸肩*

推荐