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/21105403/

相关文章:

java - 尝试调用另一个应用程序的 Activity

java - 打印数组 - 重写 toString() 方法

java - 服务层和UI界面

java - 如何模拟 RowMapper?

java - 如何从 Scala 调用现有 Java 类实例的公共(public)静态方法?

java - 列出java中所有毕达哥拉斯三元组

java - 如何在 JUnit5 中使用 Mockito

unit-testing - Joe Armstrong 在 "there are more advanced techniques"中提到的单元测试是什么

java - 计算在 Java 中调用静态方法的频率

c# - 修饰符 'XXXX' 对此项目无效