如何在使用DBUnit时防止数据删除

问题描述 投票:1回答:1

我使用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以便它不会删除已存在的数据,而只是补充它?因为有一些测试条件,你只需要再添加一个条目到现有的条目

java spring-boot spring-test dbunit spring-test-dbunit
1个回答
2
投票

尝试使用以下:

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

你没有设置任何type,你使用的是该字段的默认值,即CLEAN_INSERT

资料来源:JavaDoc

© www.soinside.com 2019 - 2024. All rights reserved.