java - 如何使用私有(private)构造函数测试最终类?

标签 java unit-testing

如何测试这样的类(参见下面的代码)?

public final class A {

    public static final String FIRST = "1st";
    public static final String SECOND = "2nd";

    private A() {
        // NOP
    }
}

目前我的所有覆盖工具都表示构造函数未包含在测试中。我的测试如下:

assertEquals(A.FIRST, "1st");
assertEquals(A.SECOND, "2nd");

如何测试我的类(class)?

UPD

这段代码解决了我的问题。

@Test
public void magic() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
    Constructor<A> constructor = A.class.getDeclaredConstructor();
    constructor.setAccessible(true);
    A instance = constructor.newInstance();

    assertNotNull(instance);
}

是的,我同意这不是最好的解决方案。但它有效:)

最佳答案

反射(reflection)可能是正确的选择:How do I test a class that has private methods, fields or inner classes?

顺便说一句,这可能与所提供的链接中的问题重复。

或者,您可以创建一个受保护的包装方法,该方法仅将所有调用转发到私有(private)方法吗?

关于java - 如何使用私有(private)构造函数测试最终类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369541/

相关文章:

java - 从 System.in 获取 unicode 值

c++ - 是否可以将非枚举值作为枚举函数参数传递?

java - 如何为接口(interface)默认方法编写 Junit

java - 无法通过 Spring 加载数据库驱动程序,但可以在类路径中手动找到它

java - 用Java读取.txt文件?

JAVA NIO ZIP 文件系统相当于 ZipOutputStream setLevel

java - 在 JavaFX 中的图像上使用 ColorPicker

java - Mockito mock 没有被调用 - ArgumentCaptor 被忽略

ruby - 使用 rake testtask 测试一组特定的测试用例

javascript - Jasmine 可以在对象上创建新属性并随后删除它们吗?