2016-01-08 33 views
0

如何模拟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; 
    } 
} 
+0

您没有提供试用版吗?你是什​​么意思**我没有发现任何有用的**?从这三个框架中选出一个,让我们知道你面临的挑战是什么?顺便说一下,我不是下来的选民:)它是一个有效的问题,你提供你正确地描述它与所有需要的信息。 –

+0

目前我正在做一个学徒,我正在学TTD。我想测试setUpConnectionToDB()方法,所以它正确地建立了一个工作连接。是的,我可以通过连接我的本地MYSQL来测试它,但这不是重点。因为当我建立我的项目并部署它。 MYSQL将不会被测试。所以我试图嘲笑这种方法。不是即将发表的声明,我必须准备。或者不让这个任何派别? – DK1990

+0

mock返回一个假对象,所以如果你模拟'DriverManager.getConnection()',你的'Connection'对象将是一个假对象,并且你将不能在该''Connection'对象上执行任何**真实**任务。在** Jan **建议的内存数据库中,如果您想要执行DB数据验证,那么该方法就行了。 –

回答

4

上的一些注意事项:

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

这条线是过时的,因为JDBC 4.0。你应该可以不用运行代码。或者,如果你认为你需要它至少摘要以及做

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

一旦这就是被照顾,谁说你必须嘲笑它​​?实际运行它更容易。

你可以使用内存数据库(如h2)来测试和检查你的代码。所有你会改变将是你的网址,用户和passwd属性。

这将是使用一些例如性能与h2

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

这样,你不仅照顾您的单元测试的为setUpConnectionToDB(),但以后可以使用这方面的方法来说期望该数据库中的一些数据。

+0

+1使用真正的内存数据库,因为它比嘲笑它更容易。作为除了h2之外的另一个选项,您可以尝试使用Derby Embedded,它非常易于设置,并且还具有in-mem数据库。 https://db.apache.org/derby/derby_downloads.html –