有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我用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!
    }
}

数据库单元文件:

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

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


共 (1) 个答案

  1. # 1 楼答案

    尝试使用以下命令:

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

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

    资料来源:JavaDoc