我写了一个工厂来生产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的参数,但我不知道如何模拟静态方法.我在测试用例中使用JUnit4和Mockito.有没有好的方法来模拟/验证这个特定的用例?

推荐答案

在Mockito上使用PowerMockito.

示例代码:

@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相关问答推荐

如何在Java中对自定义协议进行主机名验证?

是否有一种格式模式,可以在除0之外的数字前面有正负符号?

Oracle DUAL表上使用DDL时jOOQ问题的解析'

即使我正在使用并发方法,使用Javascript的应用程序也会继续冻结'

Select 按位运算序列

缩小画布比例后更改滚动窗格的内部大小

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

如何在antlr4中跳过所有反斜杠-换行符而保留换行符?

为什么有两种实现来检索数组类的组件类型?

来自外部模块的方面(对于Java+Gradle项目)不起作用

Oj算法 MatrixR032从字符串、归一化和余弦相似度计算创建

Dijkstra搜索算法的实现

如何在盒子的顶部和底部创建两张不同图片(大小相同)的盒子?

具有多个模式的DateTimeForMatter的LocalDate.parse失败

如何在字节数组中反转UTF-8编码?

在打开搜索结果时,如何让Eclipse打开整个文件?

在Java中使用StorageReference将数据从Firebase存储添加到数组列表

如何使用Rascal Evaluator从编译的JAR访问Rascal函数?

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

Java中的一个错误';s stdlib SocksSocketImpl?