我将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,以便它不删除已经存在的数据,而只是对其进行补充?因为在某些情况下,您只需要向现有条件中添加一个条目即可,
尝试使用以下内容:
@DatabaseSetup("/dbunit/books_authors.xml", type = DatabaseOperation.INSERT)
因为您没有设置任何值type
,所以您正在使用该字段的默认值CLEAN_INSERT
。
资料来源:JavaDoc
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句