内存数据库中的Spring Boot失败

时间:2018-02-07 09:05:27

标签: spring unit-testing spring-boot junit h2

我正在尝试使用嵌入式数据库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是使用的而不是主要的。

1 个答案:

答案 0 :(得分:1)

您的测试使用&#34;默认&#34;个人资料,所以它只会加载&#34;默认&#34;没有后缀的配置(即-test)。

尝试将@ActiveProfiles(&#34; test&#34;)添加到测试类中以启用测试配置文件。