Java模拟数据库连接

时间:2011-11-26 15:42:23

标签: java unit-testing java-ee tdd mocking

我想用make db连接测试类。我想测试的类在构造函数Connection类中接受为param。我想将模拟对象传递给构造函数。你能举例说明如何模拟数据库连接吗?

7 个答案:

答案 0 :(得分:12)

您可以使用支持MockRunnerJDBC。像Mockito这样的通用模拟框架也可以工作,但是JDBC是一组相互返回的接口,所以手工模拟会很难。亲眼看看:How to stub/mock JDBC ResultSet to work both with Java 5 and 6?

然而,模拟JDBC是如此脆弱和冗长(无论您使用哪种工具)我建议在一些瘦DAO层中抽象JDBC访问(参见 @duffymo 答案)或者去 - 内存数据库,如H2

另见:

答案 1 :(得分:3)

Connection是一个界面。任何模拟框架都可以模拟它:EasyMockMockito,...

模拟它与模拟任何其他Java接口没什么不同。

答案 2 :(得分:3)

我不会创建一个模拟连接 - 在我看来,它没有任何证据。

我可以看到为什么在使用实时连接完全测试后,你会模拟存储库/ DAO本身。您将模拟存储库/ DAO提供给服务或其他客户端,因为您已经对其进行了测试 - 在进行集成测试之前无需证明它是有效的。

答案 3 :(得分:3)

您可以使用模拟框架,例如上面答案中提到的那些(我个人使用EasyMock) OR 创建您自己的模拟对象:

class FakeConnection extends Connection{
       // Overrive all method behavious you want to fake.
}

答案 4 :(得分:1)

你可以试试easymock。我认为这很容易使用。 你可以找一个教程供参考。 easymock

答案 5 :(得分:1)

如果要在许多测试用例中重用该模拟,您还可以考虑实现自己的连接实现,并在任何地方重用该实现。

答案 6 :(得分:1)

我的Acolyte框架可用于此类目的 - > https://github.com/cchantep/acolyte

使用此lib,您可以创建一个为其提供处理程序的连接实例。实现处理程序,您可以“调度”查询或更新:生成结果集或更新计数(或警告)。