JUnit,如何测试截断表

时间:2014-04-03 14:06:07

标签: java sql junit truncate

我的同事们的问题。我需要测试一个SQL语句将截断表而不实际截断表。我知道我需要在截断它之前禁用约束,但我不知道如何实际截断表而不会对表造成“永久性损坏”。

很抱歉,如果已经有人问过,请提前致谢!

编辑: 我忘了提,我正在使用Maven,MyBatis,Oracle DB和Spring(Aspect,Batch)。此外,代码可以工作,但在JUnit的上下文中,需要测试该方法。虽然我将如何断言它是另一个我很快需要处理的问题。

2 个答案:

答案 0 :(得分:4)

考虑使用内存数据库引擎进行单元测试,例如Derby。这应该允许您在不损坏实际数据的情况下截断表。一种好的方法是使用不同的驱动程序进行生产和测试。如果你使用像Hibernate这样的ORM框架,这种方法特别方便。

答案 1 :(得分:2)

虽然我同意Alexey在内存数据库中很好,但我还建议您在真实数据库上测试代码。但是,就我所知,还没有一种方法可以测试它是否真的有效而没有实际截断表格。

测试数据库的建议。

  1. 确保您的架构位于版本化文件中,您只需上传到实例并为您的服务/应用程序提供有效的生产环境
  2. 确保您可以自动启动空白数据库实例
  3. 能够拍摄生产环境的快照以用于测试。
  4. 如果您已完成这些操作,则可以针对您的数据库设置一套非常好的测试,而无需进入生产环境。

    我使用类似这样的生产模式对一个真正的postgresql实例编写了许多自动化测试。

    1. 启动postgresql服务器。
    2. 将架构上传到数据库。
    3. 插入测试数据。
    4. 运行一些测试。
    5. 杀死postgresql服务器。
    6. 清理文件。
    7. <强>更新

      要启动数据库

      1. 使用initdb创建一个包含数据库文件的文件夹 http://www.postgresql.org/docs/9.3/static/app-initdb.html

      2. 启动postgres流程并将其指向这些文件http://www.postgresql.org/docs/8.2/static/server-start.html

      3. 您可能需要调整postgresql.conf和pg_hba.conf中的安全设置(这也应该是自动化的);