如何模拟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; } }
Jan.. 5
一些注意事项:
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(),但以后可以使用该期望在该数据库中的一些数据的方法该连接.
一些注意事项:
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(),但以后可以使用该期望在该数据库中的一些数据的方法该连接.