我正在尝试在Java中运行集成测试,并且我集成了liquidbase。集成测试运行得非常好,但测试指的是MySQL,它在我的本地主机上运行,而不是H2,因为我的数据库首先下降,然后集成测试运行。即使我不删除数据库,它仍然会在主数据库记录中做修改,这本身就是一个问题。
这是我的application.properties
文件spring.datasource.url=jdbc:mysql://localhost:3306/schema
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=username
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=none
spring.h2.console.enabled=true
logging.level.liquibase=info
spring.liquibase.contexts=${CONTEXT:some-context}
这是我的应用测试。属性文件
spring.jpa.hibernate.ddl-auto=none
spring.datasource.name=testData
spring.jmx.default-domain=jpa.sample
liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
liquibase.enabled=true
liquibase.url=jdbc:h2:mem:testData;mode:MySQL
liquibase.user=sa
liquibase.password=
spring.liquibase.drop-first=true
这liquibase.change-log是在项目的资源文件夹中创建的文件夹的路径。我唯一想要的是我的集成测试创建一个H2数据库并执行所有操作,而不是引用我的应用程序正在使用的本地主机上运行的MySQL。
我用这个例子作为参考:https://github.com/TurgayCan/spring-boot-liquibase-example
让我知道在这件事上我能做些什么。谢谢你。编辑:
我改变了我的应用测试。属性到下面的文件,但是插入语句现在不工作,但是表创建/修改查询正在运行,而不是MySQL
spring.liquibase.contexts=${CONTEXT:nontest}
spring.datasource.url=jdbc:h2:mem:schema;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.name=schema
spring.jpa.properties.hibernate.default_schema=schema
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
我将为application-test.properties使用以下配置:
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=validate
spring.h2.console.enabled=true
spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml