我的Spring-Boot-Mvc-Web应用程序在application.properties文件中具有以下数据库配置:
spring.datasource.url=jdbc:h2:tcp://localhost/~/pdk
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
Run Code Online (Sandbox Code Playgroud)
这是我做的唯一配置.我没有任何其他配置.尽管如此,Spring和子系统会在每次运行Web应用程序时自动重新创建数据库.数据库在系统运行时重新创建,而在应用程序结束后包含数据.
我不理解这个默认值,并期望这适合测试.
但是当我开始运行测试时,我发现数据库只重建了一次.由于测试是在没有预定义的顺序执行的,所以这是毫无意义的.
所以,问题是:如何理解?即如何在应用程序首次启动时在每次测试之前重新创建数据库?
我的测试类标题如下:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = myapp.class)
//@WebAppConfiguration
@WebIntegrationTest
@DirtiesContext
public class WebControllersTest {
Run Code Online (Sandbox Code Playgroud)
如你所见,我@DirtiesContext在课堂上尝试过并没有帮助.
UPDATE
我有一个豆子
@Service
public class DatabaseService implements InitializingBean {
Run Code Online (Sandbox Code Playgroud)
哪个有方法
@Override
@Transactional()
public void afterPropertiesSet() throws Exception {
log.info("Bootstrapping data...");
User user = createRootUser();
if(populateDemo) {
populateDemos();
}
log.info("...Bootstrapping completed");
}
Run Code Online (Sandbox Code Playgroud)
现在我做populateDemos()了清除数据库中所有数据的方法.不幸的是,它在每次测试之前都没有调用过@DirtiesContext.为什么?
我有一个副项目,我正在使用 Spring Boot、Liquibase 和 Postgres。
我有以下测试序列:
test1();
test2();
test3();
test4();
Run Code Online (Sandbox Code Playgroud)
在这四个测试中,我创建了相同的实体。由于我没有在每个测试用例之后从表中删除记录,因此出现以下异常:org.springframework.dao.DataIntegrityViolationException
我想通过以下约束来解决这个问题:
@repository来清理数据库。简而言之:如何在每个测试用例之后从一个或多个表中删除记录,而无需 1) 使用@repository每个实体的 2) 在每个测试用例上终止并启动数据库容器?
目标:在Eclipse中找到一种方法来执行JUnit类中的所有测试,该类在每次测试之前重新加载Spring上下文,而不是仅仅一次.
场景:我继承了DAO测试套件,该套件使用HSQL内存数据库,该数据库在上下文加载时使用一些示例数据进行初始化.在运行测试时,我注意到如果整个类都被执行,所有测试都会通过.但单独执行时,特定测试方法会失败.显然,测试不是独立的,早期测试正在改变数据库状态而不是自己清理,后来的测试依赖于传递.我想确定哪些测试是依赖的,并且在自己运行时会失败,而不必手动执行每个测试或修改代码.
java ×3
spring ×2
spring-boot ×2
eclipse ×1
junit ×1
liquibase ×1
spring-mvc ×1
spring-test ×1
unit-testing ×1