java - 使用 Mockito 模拟静态方法

标签 java unit-testing static mocking mockito

我编写了一个工厂来生成 java.sql.Connection 对象:

public class MySQLDatabaseConnectionFactory implements DatabaseConnectionFactory {

    @Override public Connection getConnection() {
        try {
            return DriverManager.getConnection(...);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

我想验证传递给 DriverManager.getConnection 的参数,但我不知道如何模拟静态方法。我在测试用例中使用 JUnit 4 和 Mockito。有没有一种好方法来模拟/验证这个特定的用例?

最佳答案

使用PowerMockito在 Mockito 之上。

示例代码:

@RunWith(PowerMockRunner.class)
@PrepareForTest(DriverManager.class)
public class Mocker {

    @Test
    public void shouldVerifyParameters() throws Exception {

        //given
        PowerMockito.mockStatic(DriverManager.class);
        BDDMockito.given(DriverManager.getConnection(...)).willReturn(...);

        //when
        sut.execute(); // System Under Test (sut)

        //then
        PowerMockito.verifyStatic();
        DriverManager.getConnection(...);

    }

更多信息:

关于java - 使用 Mockito 模拟静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57318375/

相关文章:

java - Hive 流和 Azure Data Lake Store 的问题

c# - 在单元测试中使用 StringBuilder 进行 PInvoking

c++ - 避免到处都有静态常量变量

java - Java中带有字符串连接的三元运算符

java - 如何迭代整数数组以找到基于 O(N) 解决方案的序列?

java - ch14Eamples.MultipleStageDemo.main 处 Unresolved 编译(MultipleStageDemo.java :24)

c# - 对装饰器模式进行单元测试

c# - 具有多个输入的单元测试

java - 如果在私有(private)构造函数中初始化,从静态方法访问时是否保证私有(private)静态字段为非空

java - Java中的静态类成员是静态的吗?