Jul*_*nel 4 java liquibase spring-boot testcontainers
我有一个副项目,我正在使用 Spring Boot、Liquibase 和 Postgres。
我有以下测试序列:
test1();
test2();
test3();
test4();
Run Code Online (Sandbox Code Playgroud)
在这四个测试中,我创建了相同的实体。由于我没有在每个测试用例之后从表中删除记录,因此出现以下异常:org.springframework.dao.DataIntegrityViolationException
我想通过以下约束来解决这个问题:
@repository来清理数据库。简而言之:如何在每个测试用例之后从一个或多个表中删除记录,而无需 1) 使用@repository每个实体的 2) 在每个测试用例上终止并启动数据库容器?
Mar*_*arc 10
用 注释您的测试类@DataJpaTest。从文档中:
默认情况下,用 @DataJpaTest 注释的测试是事务性的,并在每个测试结束时回滚。它们还使用嵌入式内存数据库(替换任何显式或通常自动配置的数据源)。
例如使用 Junit4:
@RunWith(SpringRunner.class)
@DataJpaTest
public class MyTest {
//...
}
Run Code Online (Sandbox Code Playgroud)
使用 Junit5:
@DataJpaTest
public class MyTest {
//...
}
Run Code Online (Sandbox Code Playgroud)
我发现这样做的最简单方法如下:
@Autowired
private JdbcTemplate jdbcTemplate;
Run Code Online (Sandbox Code Playgroud)
JdbcTestUtils.deleteFromTables(jdbcTemplate, "table1", "table2", "table3");
Run Code Online (Sandbox Code Playgroud)
@After或@AfterEach在您的测试类中注释的方法中调用此行:@AfterEach
void tearDown() throws DatabaseException {
JdbcTestUtils.deleteFromTables(jdbcTemplate, "table1", "table2", "table3");
}
Run Code Online (Sandbox Code Playgroud)
我在这篇博文中找到了这种方法: 使用测试容器进行轻松集成测试
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |