使用DBUnit时如何防止数据删除
How to prevent data deletion when using DBUnit
我使用 Spring 使用 liquibase 启动。
问题是,当数据库中的特定 table 中已经有数据并且我尝试在 DBUnit 测试中向此 table 添加更多数据时,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
我使用 Spring 使用 liquibase 启动。
问题是,当数据库中的特定 table 中已经有数据并且我尝试在 DBUnit 测试中向此 table 添加更多数据时,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