使用DriverManager测试数据库连接(java)

时间:2011-04-20 23:51:33

标签: java junit mocking

我目前正在尝试测试(单元测试)连接数据库的类,请参阅代码:

public Connection getConnection() {
     System.out.println("Conectando ao banco");
     try {
         return DriverManager.getConnection("jdbc:postgres://localhost/banco", "root", "");
     } catch(SQLException e) {
         throw new RuntimeException(e);
     }
}

我喜欢知道我怎么可以模拟(Jmock)它,但是DriverManager不是一个接口所以我不能模拟这个类,所以我怎么能做这个测试?

3 个答案:

答案 0 :(得分:1)

我认为嘲笑这一点毫无意义。如果您的目标是测试是否可以连接到数据库,那么您使用模拟证明了什么?绝对没有,IMO。

通过建立连接,执行操作和回滚更改来测试持久性类。

一旦这样做,在测试服务时模拟持久化类是完全合适的,因为你已经测试了持久性内容。

但你提出的建议太过分了,IMO。只需运行测试并继续使用它。

答案 1 :(得分:0)

所以你可以重新考虑你的设计。 DAO可以是持久性和业务逻辑之间的抽象层。它可以帮助您进行单元测试。

答案 2 :(得分:0)

我知道这是一个较老的问题,但在处理相关问题时遇到了它。

两种可能对您有用的策略:

1)在您的对象上模拟getConnection(),以便直接返回模拟连接。根据您的确切用例,有几种不同的方法可以做到这一点,但原则上它相对简单。

2)更改模拟框架并利用PowerMock,它允许您模拟对象上的静态方法。它不能专门用于DriverManager,但您可以在另一个可以使用的类中为此调用构建一个包装器。