如何模拟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()的单元测试,而且可以稍后将该连接用于期望该数据库中有一些数据的方法。

相关内容

  • 没有找到相关文章

最新更新