单元测试数据库连接以及与数据库相关的代码和单元测试的一般问题

Gur*_*epS 4 java testing unit-testing

如果我有一个建立数据库连接的方法,那么如何测试这个方法呢?在连接成功的情况下返回bool是一种方式,但这是最好的方法吗?

从可测试性方法来看,最好将连接方法作为一种方法和方法来获取单独的方法吗?

另外,我如何测试从数据库中获取数据的方法?我可以对预期数据进行断言,但实际数据可能会发生变化,仍然是正确的结果集.

编辑:最后一点,检查数据,如果它应该是一个汽车列表,那么我可以检查它们是真正的汽车模型.或者如果它们是一堆Web服务器,我可以在系统上有一个存在的Web服务器列表,从测试中的代码返回,并获得测试结果.如果结果不同,数据是问题,但查询不是?

THnaks

rfe*_*eak 16

首先,如果您涉及数据库,则不再进行单元测试.您已进入集成(用于连接配置)或功能测试域.那些是非常不同的野兽.

连接方法肯定应该与数据提取分开.实际上,您的连接应该来自工厂,以便您可以集中它.至于测试连接,实际上您可以通过建立与DB的连接来测试您的配置是否正确.您不应该尝试测试连接池,因为它应该是其他人编写的库(dbcp或c3p0).此外,您可能无法对此进行测试,因为您的单元/集成/功能测试应该永远不会连接到生产级别数据库.

至于测试您的数据访问代码是否有效.这是功能测试,涉及很多框架和支持.您需要一个单独的测试DB,能够在测试期间动态创建模式,将任何静态数据插入表中,并在每次测试后将数据库返回到已知的清理状态.此外,应该实例化此DB,并以这样的方式运行,即2个人可以一次运行测试.特别是如果您有超过1个开发人员,还有一个自动化测试盒.

断言应该是针对静态数据(例如,状态列表,不经常更改)的数据,或者针对在测试期间插入的数据以及删除后的数据,因此它不会干扰其他测试.

编辑:如上所述,有一些框架可以帮助解决这个问题.DBUnit相当常见.

  • 第一段说明了一切. (3认同)