当前位置: 首页 > 面试题库 >

如何为私有构造函数添加测试覆盖率?

鲁品
2023-03-14
问题内容

这是代码:

package com.XXX;
public final class Foo {
  private Foo() {
    // intentionally empty
  }
  public static int bar() {
    return 1;
  }
}

这是测试:

package com.XXX;
public FooTest {
  @Test 
  void testValidatesThatBarWorks() {
    int result = Foo.bar();
    assertEquals(1, result);
  }
  @Test(expected = java.lang.IllegalAccessException.class)
  void testValidatesThatClassFooIsNotInstantiable() {
    Class cls = Class.forName("com.XXX.Foo");
    cls.newInstance(); // exception here
  }
}

效果很好,该类已经过测试。但是Cobertura表示,该类的私有构造函数的代码覆盖率为零。我们如何向这样的私有构造函数添加测试覆盖率?


问题答案:

好吧,有很多方法可以使用反射等-真的值得吗?这是一个 永远不 应该 被调用 的构造函数,对吗?

如果您可以在类中添加注释或类似内容以使Cobertura理解不会被调用,请执行以下操作:我认为不值得人工添加覆盖范围。

编辑:如果没有办法,只需稍微减少覆盖范围即可。请记住,覆盖范围是对 有用的东西-您应该负责该工具,而不是相反。



 类似资料:
  • 问题内容: 我所知道的是,编译器在字节码中编写了一个默认的无参数构造函数。但是,如果我们自己编写,则该构造函数会自动调用。这种现象是构造函数压倒一切的吗? 问题答案: 您所描述的不是最重要的。如果您未指定默认构造函数,则编译器将创建一个默认构造函数。如果是子类,它将调用默认的父构造函数(super()),还将所有实例变量初始化为由该类型的默认值确定的默认值(数字类型为0,布尔值为false,对象为

  • 问题内容: 如果一个类包含一堆静态方法,为了确保没有人错误地初始化该类的实例,我做了一个私有的构造函数: 现在..鉴于无法看到构造函数,该如何进行测试?可以测试吗? 问题答案: 使用反射,您 可以 调用私有构造函数: 但是,您甚至可以做到这一点: 通过在构造函数中引发异常,可以防止所有尝试。 我也会自己上课,因为“因为”:

  • 我使用默认构造函数从子类中设置recordId的值,最初没有使用lombok。最终我决定在这里使用构建器,但现在的问题是lombok构建器在内部覆盖了我的默认构建器,因此从未设置值。

  • 我想为BPMN文件的JUnit测试添加测试覆盖率。我阅读了Camunda BPM流程测试报道,并使用Camunda Spring Boot Starter测试配置尝试了Spring示例,但我得到了一个异常。 代码:

  • 问题内容: 为什么将只有私有构造函数的类标记为final是一个好习惯?我的猜测是,要让其他程序员知道它不能被子类化。 问题答案: 将类定为final具有一些(小的)性能提升,因为JIT编译器可以内联该类的功能。我不知道这是否符合“良好做法”的要求,但是我看到了好处。

  • 问题内容: 说,我有一个Foo类,扩展了Bar类。我想略微推翻Foo的主持人。而且我什至都不知道Bar的构造函数的含义是什么。有没有办法做到这一点? 如果您听不懂,我的意思是: 有没有办法把一件简短而优雅的东西代替???在这段代码中?(也许是args / kwargs的一些变体) 问题答案: 输出: