我目前正在尝试测试(单元测试)连接数据库的类,请参阅代码:
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不是一个接口所以我不能模拟这个类,所以我怎么能做这个测试?
答案 0 :(得分:1)
我认为嘲笑这一点毫无意义。如果您的目标是测试是否可以连接到数据库,那么您使用模拟证明了什么?绝对没有,IMO。
通过建立连接,执行操作和回滚更改来测试持久性类。
一旦这样做,在测试服务时模拟持久化类是完全合适的,因为你已经测试了持久性内容。
但你提出的建议太过分了,IMO。只需运行测试并继续使用它。
答案 1 :(得分:0)
所以你可以重新考虑你的设计。 DAO可以是持久性和业务逻辑之间的抽象层。它可以帮助您进行单元测试。
答案 2 :(得分:0)
我知道这是一个较老的问题,但在处理相关问题时遇到了它。
两种可能对您有用的策略:
1)在您的对象上模拟getConnection()
,以便直接返回模拟连接。根据您的确切用例,有几种不同的方法可以做到这一点,但原则上它相对简单。
2)更改模拟框架并利用PowerMock,它允许您模拟对象上的静态方法。它不能专门用于DriverManager
,但您可以在另一个可以使用的类中为此调用构建一个包装器。