数据库基础单元测试策略:在单元测试和测试数据之间截断表

Posted

技术标签:

【中文标题】数据库基础单元测试策略:在单元测试和测试数据之间截断表【英文标题】:Database base unit testing strategy: truncating tables between unit tests & test data 【发布时间】:2012-02-02 10:28:44 【问题描述】:

我正在尝试使用 JUnit 来测试一些数据库代码。我对此很陌生,所以请多多包涵。

我有一个由四个表组成的本地测试数据库。其中两个表已填充数据,另外两个在程序执行前为空。

程序基本上对填充的两个表执行一些查询,处理结果然后将这些结果写入程序执行时为空的两个表。有许多方法可以读取和写入数据库。我想测试一下。

我想要的是 tearDown() 方法在程序执行时截断空表,以便为下一次测试做好准备。实现这一目标的最佳方法是什么?

此外,每次开发人员设置测试环境时,可能会通过运行 SQL 脚本来创建包含数据的表。有没有更好的方法来做到这一点?可以自动化吗?会有相当多的数据,所以我不太喜欢为每个表手动创建 XML 数据集。

我正在使用 Oracle 数据库。

非常感谢您提供的任何建议/建议。

【问题讨论】:

【参考方案1】:

尝试在您的测试中使用DBUnit 框架。这是对 JUnit 的扩展,并提供了您需要的功能。设置它可能有点困难,但一旦设置它就会像魅力一样发挥作用。

【讨论】:

嗨,Kurt,我查看了 DBUnit,但不确定应该使用它的哪些部分。你能解释一下我将如何使用 DBUnit 来实现我的每个目标吗? DBUnit 提供了一些开箱即用的数据库操作:CLEAN_INSERT(先清表,然后插入值)、INSERT(只插入值)、DELETE(删除所有由 dbunit 插入的值) , DELETE_ALL(删除所有值)。此外,您可以定义您的测试数据集。鉴于您的问题,在我看来,您需要将灵活数据定义为 dbunit 数据集,并在每次测试之前将其插入并在之后进行清理。

以上是关于数据库基础单元测试策略:在单元测试和测试数据之间截断表的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot中单元测试数据库的切换策略

Python单元测试之unittest基础

在单元测试之间恢复数据库:数据库仍在使用中

在 Swift 单元测试中,我在 App 和单元测试目标之间遇到类转换错误

软件测试相关术语概念

React 单元测试策略及落地