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

时间:2019-03-08 11:27:00

标签: java spring-boot spring-test dbunit spring-test-dbunit

我将Spring Boot与liquibase一起使用。

问题是,当数据库的特定表中已经有数据,并且我尝试在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,以使其不删除已经存在的数据,而只是对其进行补充? 因为在某些情况下,您只需要向现有条件中添加一个条目即可

1 个答案:

答案 0 :(得分:2)

尝试使用以下内容:

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

因为您没有设置任何type,而是使用该字段的默认值CLEAN_INSERT

来源:JavaDoc