我正在使用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创建的测试类准备好配置。