繁体   English   中英

如何模拟DriverManager.getConnection?

[英]How to mock DriverManager.getConnection?

如何模拟DriverManager.getConnection()方法?

我想测试我的方法setUpConnectiontoDB()

我用PowerMock,easyMock和Mokito本身进行了尝试。 我没有发现有用的东西。

我的代码:

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class MysqlDAO implements DAO {
    private final Properties properties = new Properties();

    public MysqlDAO(String configPath) {
        loadProperties(configPath);
    }

    private Properties loadProperties(String configPath) {
        try {
            properties.load(new FileInputStream(configPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return this.properties;
    }

    @Override
    public Connection setUpConnectionToDB() {
        try {
            Class.forName("com.mysql.jdbc.Driver");

            return DriverManager.getConnection(
                    properties.getProperty("url"),
                    properties.getProperty("user"),
                    properties.getProperty("passwd"));

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

一些注意事项:

Class.forName("com.mysql.jdbc.Driver");

从JDBC 4.0开始,此行已过时。 您应该无需运行代码。 或者,如果您认为需要它,至少也要对其进行抽象

Class.forName(properties.getProperty("dbdriver", "com.mysql.jdbc.Driver");

处理完之后, 谁说您必须嘲笑它 实际运行起来要容易得多。

您也可以使用内存数据库(例如h2)进行测试,并为此检查代码。 您只需更改url,user和passwd属性即可。

这将是与h2一起使用的一些示例属性:

dbdriver = org.h2.Driver
url = jdbc:h2:mem:test
user = sa
passwd = sa

这样,您不仅可以处理setUpConnectionToDB()的单元测试,而且以后还可以将该连接用于需要该数据库中某些数据的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM