Как проверить код, используя реальную базу данных в Spring Boot? - PullRequest
1 голос
/ 11 марта 2020

Я использую JUnit 5 и хочу проверить свою бизнес-логику c, которая использует 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

Миграция * Файл 1028 *:

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();
    }

}

Моя последняя часть stacktrace:

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
  • для обновления sh подключения к БД, пробовал ddl-auto: создать
  • для создания другого профиля test в application.yml с собственными свойствами источника данных

1 Ответ

0 голосов
/ 16 апреля 2020

Я решил проблему с добавлением datasource свойств в конфигурации шаблона JUnit в моей идее.

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

После добавления вы подготовите конфигурации для каждого созданного класса Test. с JUnit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...