相关疑难解决方法(0)

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

这是代码:

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

这是测试:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

工作正常,课程经过测试.但Cobertura表示,该类私有构造函数的代码覆盖率为零.我们如何为这样的私有构造函数添加测试覆盖率?

java testing code-coverage

106
推荐指数
8
解决办法
6万
查看次数

是否可以在现有实例上调用构造函数?

众所周知,使用sun.misc.Unsafe#allocateInstance它可以创建一个对象,而无需调用任何类构造函数。

是否可以做相反的事情:给定一个现有实例,调用它的构造函数?


澄清:这不是关于我在生产代码中要做的事情的问题。我对 JVM 内部结构和仍然可以完成的疯狂事情感到好奇。欢迎特定于某些 JVM 版本的答案。

java reflection jvm unsafe

3
推荐指数
2
解决办法
2806
查看次数

标签 统计

java ×2

code-coverage ×1

jvm ×1

reflection ×1

testing ×1

unsafe ×1