< /li>
[*] Мне нужны два тестирования: employee_db и location_db. < /p>
< /li>
Тесты - это Установка с использованием Spring Boot TestContainers. < /p>
< /li>
MySQL 8.0 используется в настройке TestContainers, в то время как Application-test.yml настроен на использование базы данных HSQLDB в памяти также для моих модульных тестов (возможный конфликт?). < /p>
< /li>
< /ul>
configuration-testContainers:
Код: Выделить всё
@ActiveProfiles("test")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Import(EurekaMockServer.class)
public abstract class IntegrationTestConfiguration {
@LocalServerPort
private Integer port;
protected String getBaseUrl() {
return "http://localhost:" + port;
}
@Container
@ServiceConnection
public static MySQLContainer mySQLContainerLocation = new MySQLContainer("mysql:8.0")
.withUsername("root")
.withPassword("test_password_db")
.withDatabaseName("location_db");
@Container
@ServiceConnection
public static MySQLContainer mySQLContainerEmployee = new MySQLContainer("mysql:8.0")
.withUsername("root")
.withPassword("test_password_db")
.withDatabaseName("employee_db");
static {
mySQLContainerLocation.start();
mySQLContainerEmployee.start();
}
}
Код: Выделить всё
@RestController
@RequestMapping("/v1/emp")
@RequiredArgsConstructor(onConstructor_ = @__(@Autowired))
public class EmployeeController {
private final EmployeeService employeeService;
private final Logger logger = LoggerFactory.getLogger(EmployeeController.class);
@GetMapping("/all")
public ResponseEntity getAll() {
List allEmployees = employeeService.getAll();
logger.info("GET '/all' - Selecting all Employees");
return ResponseEntity.ok(allEmployees);
}
}
Код: Выделить всё
@ActiveProfiles("test")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@RequiredArgsConstructor(onConstructor_ = @__(@Autowired))
public class EmployeeControllerIT extends IntegrationTestConfiguration {
private final TestRestTemplate testRestTemplate;
@Test
@Order(1)
@DisplayName("ITest for getAll() function (success) - EmployeeController")
public void EmployeeControllerIT_GetAll_ReturnAllEmployeeDTOS() {
System.out.println(getBaseUrl());
ResponseEntity response = testRestTemplate.exchange(
getBaseUrl() + "/v1/emp/all",
HttpMethod.GET,
null,
String.class
);
System.out.println("Response Body: " + response.getBody());
}
}
http://localhost:52734
Response Body: {"timestamp":"2025-02-25T02:31:44.417+00:00","status":500,"error":"Internal Server Error","path":"/v1/emp/all"}
org.opentest4j.AssertionFailedError:
expected: 200 OK
but was: 500 INTERNAL_SERVER_ERROR
< /code>
Потенциальные проблемы и наблюдения < /h2>
Конфликт базы данных? < /li>
< /ol>
application-test.yml использует hsqldb, но мои тестовые контейнеры используют mysql. < /p>
< /li>
Должен ли я переопределить свойства данных профиля тестового профиля, чтобы использовать MySQL? 2 ">
Eureka Promplocing проблема? может потерпеть неудачу, если макетный сервер не настроен должным образом. p>
< /li>
< /ul>
Проблема с автоматической конфигурацией пружинной загрузки? < /li>
< /ol>
@serviceconnection аннотации должны подключить правильный данных, но Spring Boot все еще использует HSQLDB по умолчанию из-за приложения test.yml?
Должен ли я вручную настроить spring.datasource.url в моих тестовых свойствах?
< /li>
< /ul>
testresttemplate не достигает службы? < /li>
< /ol>
Базовый URL (http: // localhost: ) является правильным, но что -то ломается.
Должен ли я проверять журналы на наличие пропущенных конфигураций бобов? .yml:
spring:
datasource:
url: jdbc:hsqldb:mem:testdb
driver-class-name: org.hsqldb.jdbc.JDBCDriver
username: sa
password: sa
jpa:
hibernate:
ddl-auto: update
< /code>
Окончательный вопрос: < /h2>
Учитывая мою настройку, что вызывает ошибку внутреннего сервера 500 во время моего интеграционного теста, и как я могу обеспечить правильное подключение testresttemplate Для тестирования, управляющих MySQL?
Любая помощь будет очень оценена!>
Подробнее здесь: https://stackoverflow.com/questions/794 ... -mysql-8-0
Мобильная версия