2013-02-14 123 views
1

我有一个方法,它使用一些DAO对数据库进行一些调用。我应该使用mock或dbunit来测试访问数据库的方法吗?

我应该使用模拟机制来避免管理数据库(并且模拟所有的DAO方法),还是应该使用dbunit(或者一些等效的方法)来加载并初始化内存中的数据库(如hsqldb)?

对于每种方法(模拟vs dbunit),这些有利吗?

回答

0

这是一个很难回答的问题,然而,我会建议的以及我通常喜欢的是,将DAO本身作为嵌入式数据库或外部测试数据库(作为集成测试)进行测试,以便您知道DAO对某种读取数据库正确运行。

然后,对于使用DAO的组件,您可以对其进行嘲弄以将测试与显式使用数据库分开。

这种方法的缺点是你必须有某种嵌入式或其他数据库可用于测试。

你可以模拟你的DAO单元测试;然而,你并不完全确定你的嘲笑将会成为数据库提供的真实代表。

希望这会有所帮助。

2

你想测试数据库。我不明白在这种情况下模拟是有意义的。一旦你知道DAO正在工作,然后将模拟注入到使用它们的服务中。

与此同时,请测试您的数据库。您可以创建一个临时测试数据库或使所有测试成为事务性的:设置测试工作单元,执行它,验证它,将其回滚。

1

我会推荐使用模拟对象,总的来说数据库访问并不是真正的高性能,并且花费很多时间,我们有一个超过4000个单元测试的项目,花费了3个多小时来运行完整的测试,特别是当考虑到在每次测试之前和之后安装和拆卸访问数据库。

关于dbunit我使用了它,所以我不能说它的好与不好,但据说我会避免在单元测试中访问数据库,它应该仅限于逻辑单元。

+0

我同意,速度是必不可少的。如果运行所有单元测试的时间超过几秒钟,开发人员将找到不运行它们的原因。 ......这并不是说你不能使用相同的测试框架编写端到端的测试。但是任何碰到真正数据库(或真实服务器)的东西都应该移到验收测试的旁边。 – 2013-02-14 14:44:44

相关问题