在IntelliJ IDEA 15.0.2中,如何在测试覆盖率测量期间忽略琐碎的getter和setter(平凡的方法)?
// 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;
}
答案 0 :(得分:11)
答案 1 :(得分:1)
仍然没有办法做到这一点,这是一件好事。我了解您的痛苦,我也感到。
让我们假设您拥有一个应用程序,如果这些应用程序不适合这些琐碎的安装程序和获取器,那么它将具有100%的代码覆盖率。这意味着您的所有代码都会通过测试套件进行练习,但琐碎的设置器和获取器除外。
这就提出了一个问题,为什么平凡的方法首先存在。如果所有代码都已运行并且未调用方法,则您的100%覆盖率是肤浅的。所有代码都已运行,但并非所有用例都经过测试。这就是代码覆盖范围欺骗的确切原因。
有以下几种情况:
答案 2 :(得分:0)
一个更简单的例子:
public abstract class A {
public static int add(int x, int y) {
return x + y;
}
}
这里IntelliJ的报道抱怨A未经测试的构造函数。我必须写一些像傻瓜一样的东西
new A() {};
进入我的测试以进行测试。如果我将这种方法用于帮助类
public final class A {
private A() {}
public static int add(int x, int y) {
return x + y;
}
}
我需要使用反射来“测试”空代码:
final Class<?> clazz = Class.forName("package.name.of.A");
final Constructor<?> constructor = clazz.getDeclaredConstructors()[0];
constructor.setAccessible(true);
constructor.newInstance();
看起来并不那么聪明。