相关疑难解决方法(0)

如何在Spring中的每次测试之前重新创建数据库?

我的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.为什么?

java spring spring-mvc spring-test spring-boot

42
推荐指数
7
解决办法
5万
查看次数

使用 Spring Boot 和 Liquibase 时如何在每次集成测试后清理数据库表?

我有一个副项目,我正在使用 Spring Boot、Liquibase 和 Postgres。

我有以下测试序列:

test1();
test2();
test3();
test4();
Run Code Online (Sandbox Code Playgroud)

在这四个测试中,我创建了相同的实体。由于我没有在每个测试用例之后从表中删除记录,因此出现以下异常:org.springframework.dao.DataIntegrityViolationException

我想通过以下约束来解决这个问题:

  1. 我不想使用@repository来清理数据库。
  2. 我不想杀死数据库并在每个测试用例上创建它,因为我正在使用 TestContainers 并且这样做会增加完成测试所需的时间。

简而言之:如何在每个测试用例之后从一个或多个表中删除记录,而无需 1) 使用@repository每个实体的 2) 在每个测试用例上终止并启动数据库容器?

java liquibase spring-boot testcontainers

4
推荐指数
2
解决办法
3349
查看次数

在Eclipse中独立运行所有JUnit测试,每次都重新加载Spring上下文

目标:在Eclipse中找到一种方法来执行JUnit类中的所有测试,该类在每次测试之前重新加载Spring上下文,而不是仅仅一次.

场景:我继承了DAO测试套件,该套件使用HSQL内存数据库,该数据库在上下文加载时使用一些示例数据进行初始化.在运行测试时,我注意到如果整个类都被执行,所有测试都会通过.但单独执行时,特定测试方法会失败.显然,测试不是独立的,早期测试正在改变数据库状态而不是自己清理,后来的测试依赖于传递.我想确定哪些测试是依赖的,并且在自己运行时会失败,而不必手动执行每个测试或修改代码.

java eclipse junit spring unit-testing

1
推荐指数
1
解决办法
718
查看次数