【问题标题】:DbUnit @DatabaseTearDown annotation: how to delete only certain records? (those inserted using @DatabaseSetup annotation)DbUnit @DatabaseTearDown 注释:如何只删除某些记录? (使用@DatabaseSetup 注解插入的那些)
【发布时间】:2014-12-09 10:44:24
【问题描述】:

我正在尝试仅删除我使用 @DatabaseSetup 注释插入的那些记录。

我的测试如下所示:

@Test
@DatabaseSetup("classpath:data-set.xml")
@DatabaseTearDown(value={"classpath:data-set.xml"}, type= DatabaseOperation.DELETE)
public void testSomething() throws Exception {

数据集.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1" name="Joe"/>
</dataset>

据推测,使用 DatabaseOperation.DELETE 意味着“删除与数据集中的行匹配的数据库表行”。但是当我执行测试时,它会删除我表中的所有数据。

我认为问题在于用于拆卸的 xml 文件的格式。我尝试使用不同的格式:

首先尝试 tear-down.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1"/>
</dataset>

第二次尝试 tear-down.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person/>
</dataset>

并且无论使用何种格式,它总是会删除表中的所有数据。我找不到一个不简单地列出表名的用于拆卸的格式示例。在大多数示例中,人们似乎使用相同的 xml 文件进行设置和拆卸。

但这必须是可能的,不是吗?

【问题讨论】:

    标签: dbunit spring-test-dbunit


    【解决方案1】:

    插入数据库的记录不是被@DatabaseTearDown注解删除的,而是被@DatabaseSetup删除的。原因是 DbUnit 默认情况下会清理表,然后插入测试记录。您可以使用DatabaseOperation.INSERT 来防止这种情况发生。

    【讨论】:

    • 哇!就是这样!我正要回信说这不是发生在我身上的事情,我的其余表没有被删除数据。这是真的。但我猜 DBUnit 默认做的是一个 CLEAN_INSERT 为你的 data-set.xml 中的表。但是在张开大嘴之前,我尝试了您的建议并将@DatabaseSetup 更改为使用 INSERT,现在 DBUnit 仅擦除由 DBUnit 本身插入的表中的数据。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多