如何在Spring Boot中使用真实数据库测试代码



我正在使用JUnit 5,并希望测试使用Spring Data JPA的业务逻辑。我在启动JPA测试时收到错误。

我有我的财产:

jpa:
hibernate:
ddl-auto: validate
properties:
hibernate:
jdbc:
lob:
non_contextual_creation: true
show-sql: true
flyway:
validate-on-migrate: false
enabled: true

我的迁移sql文件:

CREATE SEQUENCE public.entity_id_sequence INCREMENT 1 START 1 MINVALUE 1;
CREATE TABLE IF NOT EXISTS movies
(
id    BIGINT PRIMARY KEY,
title VARCHAR(30) UNIQUE NOT NULL
);
CREATE TABLE IF NOT EXISTS reservations
...

和我的测试班:

@RunWith(SpringRunner.class)
@DataJpaTest
public class MovieEntityTest {
@Autowired
private MovieRepository movieRepository;
@Test
public void show_not_allow_null_title() {
Movie movie = new Movie();
movie.setTitle("My Title");
Movie inDB = movieRepository.save(movie);
assertThat(inDB.getTitle()).isNotNull();
}
}

我的堆叠竞赛的最后一部分是:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "CREATE TABLE IF NOT EXISTS SCREENINGS
(
ID             BIGINT PRIMARY KEY,
MOVIE_ID       BIGINT REFERENCES MOVIES (ID)          NOT NULL[*],
SCREENING_TIME TIMESTAMP                              NOT NULL,
ROOM_ID        BIGINT REFERENCES SCREENING_ROOMS (ID) NOT NULL,
TICKET_PRICE   NUMERIC(15, 2)                         NOT NULL
)"; expected "DEFERRABLE"; SQL statement:
CREATE TABLE IF NOT EXISTS screenings
(
id             BIGINT PRIMARY KEY,
movie_id       BIGINT REFERENCES movies (id)          NOT NULL,
screening_time TIMESTAMP                              NOT NULL,
room_id        BIGINT REFERENCES screening_rooms (id) NOT NULL,
ticket_price   NUMERIC(15, 2)                         NOT NULL
) [42001-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:453)
...

我该怎么解决?

我试过了:

  • 设置flyway.enabled:false
  • 若要刷新与数据库的连接,请尝试ddl-auto:create
  • 在application.yml中创建另一个具有自己数据源属性的配置文件test

我在Idea中解决了将datasource属性添加到JUnit模板配置中的问题。

Edit configurations --> press '+' --> Junit --> Add your properties to the environment variables

添加之后,您将为每个使用JUnit创建的测试类准备好配置。

最新更新