首页 > 解决方案 > 使用 DBUnit 时如何防止数据被删除

问题描述

我使用带有 liquibase 的 Spring Boot。

问题是当数据库中的特定表中已经有数据并且我尝试在 DBUnit 测试中向该表添加更多数据时,DBUnit 会删除所有数据并仅插入自己的数据。

我举个例子,我已经在数据库中插入了五个作者。不使用 DBUnit 进行测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AuthorsManagerTest {

    @Autowired
    private AuthorsManager authorsManager;

    @Test
    public void getAllAuthors() {
        List<Author> authors = authorsManager.getAllAuthors().collect(Collectors.toList());
        assertFalse(authors.isEmpty());
        assertEquals(5, authors.size());    // 5!
    }
}

另一个测试我用 DBUnit 再添加一个,但是五个都被删除了,只插入了 DBUnit 中的那些作者:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestExecutionListeners({
        TransactionalTestExecutionListener.class,
        DependencyInjectionTestExecutionListener.class,
        DbUnitTestExecutionListener.class
})
@DatabaseSetup("/dbunit/books_authors.xml") // add dbunit file
public class AuthorsManagerTest {

    @Autowired
    private AuthorsManager authorsManager;

    @Test
    public void getAllAuthors() {
        List<Author> authors = authorsManager.getAllAuthors().collect(Collectors.toList());
        assertFalse(authors.isEmpty());
        assertEquals(1, authors.size());    // only one!
    }
}

DBUnit 文件:

<dataset>
    <Authors id="200" name="My Author" />
</dataset>

如何配置 DBUnit 使其不会删除已经存在的数据,而只是对其进行补充?因为有测试条件,你只需要在已经存在的条目上再添加一个条目

标签: javaspring-bootspring-testdbunitspring-test-dbunit

解决方案


尝试使用以下:

@DatabaseSetup("/dbunit/books_authors.xml", type = DatabaseOperation.INSERT)

因为您没有设置任何type,您正在使用该字段的默认值,即CLEAN_INSERT.

来源:JavaDoc


推荐阅读