Junit测试数据库

时间:2016-11-19 02:10:43

标签: java junit

我正在为基于Hibernate / SQL构建的应用程序编写crud API。我正在使用mysql进行测试和实时环境。

为了测试,我有一个数据库,用户和权限。因此每次测试时,我都必须遵循以下步骤:

  1. 从数据库中删除所有表。
  2. 运行" mvn clean install",然后hibernate在db中查找表,如果不存在则创建它们。
  3. 我希望我的测试能够在我的mysql数据库中收集垃圾,而且我不必每次都丢弃表。是否有一些内存中的rdbms可用于此目的,我如何根据运行环境选择此类和mysql进行测试或实时。

2 个答案:

答案 0 :(得分:3)

我更喜欢使用H2,dbUnit和spring-test。 Hsqldb和Derby是其他内存数据库,是合理的选择。 spring中的测试使用自己的独立上下文和自己的数据源,测试上下文配置取代了正常的应用程序上下文值。这样,在数据库之间切换不需要额外的工作,可以在应用程序使用mysql时将测试设置为使用H2。

请注意,mysql对它接受的sql是允许的,其他数据库往往更严格。如果您使用本机sql,这可能是使用内存数据库的障碍。

我认为让测试运行你的数据层是值得的,特别是在使用Hibernate时,这很复杂,我想确认它确实在做我认为它应该做的事情。

答案 1 :(得分:1)

HSQLDB和H2我认为是非常常见的选择。

就我个人而言,我不再沿着这条路走下去了 - 我只是在运行单元测试时用测试双打来删除DAO,以便他们在内存中写入或读取列表,或者为它们提供模拟。没有复杂的技术。它确实意味着DB的实际持久性没有被测试 - 如果我觉得我需要它,我通常会为DAO自己编写单独的单元测试来专门连接到物理数据库,并清理我需要的任何东西在拆解那些测试。