java - 使用 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 使其不会删除已经存在的数据,而只是对其进行补充?因为有测试条件,你只需要在已经存在的条目上再添加一个条目
解决方案
尝试使用以下:
@DatabaseSetup("/dbunit/books_authors.xml", type = DatabaseOperation.INSERT)
因为您没有设置任何type
,您正在使用该字段的默认值,即CLEAN_INSERT
.
来源:JavaDoc
推荐阅读
- php - 当我使用 composer update 或更新新扩展时,得到错误提示验证它们是否在您的 .ini 文件中启用
- gerrit - 提交标签以用于更改 Fuchsia OS 文件?
- javascript - 有没有办法在 Highcharts 中的某个点的 mouseOver 上获取鼠标相对于页面的坐标?
- sql - 为什么访问数据库查询输出的属性在一个系统中而不是在另一个系统中给出错误
- java - 将新字符串创建为文字/新对象时的内存分配
- vb.net - 使用另一个用户控件从用户控件更改图片框、BackgroundImage
- javascript - 无法在反应应用程序中运行 puppeteer,找不到模块:编译时无法解析“ws”
- javascript - 从刷新的 JSON 更新 img src
- .net - 在.NET核心中查找2个坐标之间的距离
- c# - ASP.NET C# 对象引用未设置为对象的实例。在 System.Web.Services.Protocols.SoapClientType..ctor