在 DAO 单元测试期间恢复数据的策略是啥?
Posted
技术标签:
【中文标题】在 DAO 单元测试期间恢复数据的策略是啥?【英文标题】:What’s the strategy to recover data during DAO unit test?在 DAO 单元测试期间恢复数据的策略是什么? 【发布时间】:2011-02-04 17:43:41 【问题描述】:当我在 JUnit 中测试 DAO 模块时,一个明显的问题是:如何恢复数据库中的测试数据? 例如,在 testA() 和 testB() 两个测试方法中都应该删除一条记录,这意味着这两种测试方法的前提条件都需要删除现有记录。然后我的策略是在 setUp() 方法中插入记录来恢复数据。
您有什么更好的解决方案?或者你在这种情况下的实际想法?谢谢
【问题讨论】:
【参考方案1】:我会创建一个名为createRecord()
的方法。它也可能是一种测试方法。每当您需要创建记录时,请从您的其他测试方法中调用该方法。
【讨论】:
【参考方案2】:也许DBUnit 可以帮助您。 它允许在执行每个测试之前使 TEST 数据库处于预定义状态。设置完成后,测试数据库驱动的应用程序非常容易。
【讨论】:
【参考方案3】:一个简单的解决方案是在测试后回滚事务(例如在tearDown()
中)。这样,测试可以进行他们喜欢的所有更改,但不会更改数据库(不要忘记为连接关闭autoCommit
)。
但有一个缺点:如果测试失败,您无法查看数据库找出原因。因此,我的大多数测试在运行之前都会清理数据库并使用 autoCommit,这样我就可以看到它失败的最后状态,对数据运行固定的 SQL 查询等。
【讨论】:
【参考方案4】:Bozho 是对的,当然,只是补充一点细节:
如果可能,单元测试会在操作数据之前设置它们的数据,然后自行清理。因此,理想情况下,您不会践踏现有数据(可能是从生产中复制的)进行测试,而是设置一些作为测试的一部分;这实际上是您可以确保您的测试将测试您的意图的唯一方法。
【讨论】:
以上是关于在 DAO 单元测试期间恢复数据的策略是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot DataJpaTest 单元测试恢复到 H2 而不是 mySql
深度技术Windows系统中unity web player是啥程序