如何在 Java 中测试抽象 class 的构造函数逻辑

How do test an abstract class's constructor logic in Java

我有以下代码片段,其中我有一个带有参数化构造函数的抽象 class。

public abstract class Cat {
    protected final Connection con;

    protected Cat(Connection con) throws SQLException {
        if (con == null || con.isClosed()) {
           throw new SQLException("failed);
        }
        this.con = con;
    }
}

是否可以使用 Java mockito 测试构造函数的行为?例如,如果提供了关闭的连接,我可以测试构造函数失败吗?

您可以像这样实例化您的抽象 class 并将连接的 Mockito Mock 作为参数传递。

@Mock
Connection conn;

// in your test method
new Cat(conn){};

我认为如果您测试派生 class 的构造函数就足够了,它扩展了这个抽象 class。由于您无法创建 abstract class 的实例,因此单独测试它没有意义。即使是私有方法也不会单独测试。如果您尝试为此 class 创建匿名对象进行测试,它也将被视为派生对象 class

因此测试派生的 class 构造函数,它显然将调用超级构造函数,因此您的抽象 class 构造函数代码将已经被覆盖。