Проблема с базой данных с микросервисом Spring Boot и его специальным интеграционным тестом Cucumber.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с базой данных с микросервисом Spring Boot и его специальным интеграционным тестом Cucumber.

Сообщение Anonymous »

У нас есть микросервис RESTful Java/SpringBoot и связанный с ним модуль интеграционного тестирования, который выполняет шаги Cucumber. Проблема в том, что при запуске теста, хотя вызов API Cucumber для вставки данных фактически вставляет данные и возвращает полностью заполненный класс с новым идентификатором, а проверка ответа также проходит (в Cucumber), когда мы вызываем метод/шаг checkData(), результатом становится 0 записей. Например, у нас настроено 2 источника данных, но проверка журналов показывает, что это не так!
Ниже приведена суть кода, присутствующего в интеграционном тесте. Я считаю, что некоторые аннотации могут быть неверными; Я пытался в течение 2 дней возиться с аннотациями и yml-файлом конфигурации приложения, но почти всегда одна и та же ошибка. Я попробовал DirtiesContext в классе Cucumber, установив для IsolationLevel значение ReadUncommited, но так и не увидел эту «вставленную» запись на этапе Cucumber!

Код: Выделить всё

@CucumberContextConfiguration
@ContextConfiguration(classes = {MainApp.class})
@RunWith(Cucumber.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = {MainApp.class})
@Import(MainApp.class)
@EnableAutoConfiguration
@AutoConfigureWireMock(port = 0)
public class ApplicationTestSteps {

@Autowired
private JdbcTemplate jdbcTemplate;

private List retrieveAllBooks() {
return jdbcTemplate.query("select * from t_books", new BookMapper());
}

@When("I call the insert data endpoint in the app") {
//api call to the app that inserts data into the db
}

@And("I check the database has the data")
public void checkData() {
assertThat(retrieveAllBooks().size().isGreaterThan(0));
}
}
Ниже приведен файл application.yml;

Код: Выделить всё

spring:
datasource:
url: jdbc:h2:memLTESTDB;MODE=DB2
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
defer-datasource-initialisation: true
generate-ddl: false

hibernate:
hbm2ddl:
auto: none
hibernate:
hbm2ddl.auto: update
Наконец, мы используем /resources/schema.sql и /resources/data.sql для инициализации БД, поскольку БД представляет собой старую базу данных DB2, а классы Entity в кодовой базе API выбирают только подмножество многих полей.
>

Подробнее здесь: https://stackoverflow.com/questions/796 ... r-integrat
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»