我正在尝试使用嵌入式数据库h2测试我的Spring Boot应用程序。至于dev和prod,我将使用MySQL数据库。
我想为每种模式使用不同的application.yml和schema.sql文件。
项目结构是:
src
--main
----resources
------application.yml
------schema.sql
--test
----resources
------application-test.yml
------schema-test.sql
这是我的RespositoryTest:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@DataJpaTest
public class IUserRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private IUserRepository userRepository;
@Test
public void Should_ReturnEmployee_ForExistingEmail() {
User oneUser=new User("john","doe","example@email.com");
entityManager.persist(oneUser);
List<User> userList=userRepository.findUserByEmail("example@email.com");
assertThat(userList).isNotEmpty();
assertThat(userList.get(0)).isNotNull();
assertThat(userList.get(0).getEmail()).isEqualTo("example@email.com");
}
这是我的test / resources / application-test.yml:
spring:
profiles: test
datasource:
url: jdbc:h2:mem:test;INIT=create schema IF NOT EXISTS mydb;DB_CLOSE_DELAY=-1
platform: h2
username: sa
password:
driverClassName: org.h2.Driver
jpa:
hibernate:
ddl-auto: create-drop
properties:
hibernate:
default-schema: mydb
dialect: org.hibernate.dialect.H2Dialect
这是我的test / resources / schema-test.sql:
CREATE SCHEMA IF NOT EXISTS MYDB
至于我的main / resources / application.yml:
logging:
level:
org.springframework.web: DEBUG
org:
hibernate:
SQL: DEBUG
spring:
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: toor
database:
driverClassName: com.mysql.jdbc.Driver
当我以弹簧启动方式运行我的应用程序时,使用了主应用程序。并且一切都很好,但是当我运行测试时,我收到此错误:
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
Caused by: org.h2.jdbc.JdbcSQLException: Schema "MYDB" not found; SQL statement
导致我的所有测试失败。
当我尝试使用这个项目结构时:
src
--main
----resources
------application.yml
------schema.sql
--test
----resources
------application.yml
------schema.sql
测试成功但是当我将我的应用程序作为spring boot运行时,test / resources / application.yml是使用的而不是主要的。
答案 0 :(得分:1)
您的测试使用&#34;默认&#34;个人资料,所以它只会加载&#34;默认&#34;没有后缀的配置(即-test)。
尝试将@ActiveProfiles(&#34; test&#34;)添加到测试类中以启用测试配置文件。