Теперь я добавляю в него модульные тесты. Я довольно новичок в Spring Boot и, в основном, модульная тестовая часть. Из -за CI/CD (конвейер Build) я не могу использовать постоянный/внешний DB для тестов. Следовательно, мне нужно использовать DB. < /P>
Первоначальный запуск (основной класс) запускает кучу запросов DB для создания кэша во время появления проекта. Поэтому мне понадобится Postgres DB для тестирования (много используемых функций DB). < /P>
По сути, мне нужно было бы использовать TestContainers (PostgreSQL). Сначала я пишу очень базовый тест, ч т о б ы з а в л а д е т ь е г о . < c o d e > s r c < b r / > | < b r / > m a i n < b r / > t e s t < b r / > | < b r / > r e s o u r c e s < b r / > | < b r / > a p p l i c a t i o n - t e s t . p r o p e r t i e s < b r / > s c h e m a . s q l < b r / > d a t a . s q l < b r / > < / c o d e > < b r / > С о о т в е т с т в у ю щ и й p o m . x m l < / p > < b r / > < c o d e > & l t ; p r o p e r t i e s & g t ; < b r / > & l t ; j a v a . v e r s i o n & g t ; 1 1 & l t ; / j a v a . v e r s i o n & g t ; < b r / > & l t ; t e s t c o n t a i n e r s . version>1.15.1
org.springframework.boot
spring-boot-starter-data-jdbc
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-cache
org.springframework.boot
spring-boot-starter-security
io.jsonwebtoken
jjwt
0.9.1
org.springframework.boot
spring-boot-starter-validation
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.postgresql
postgresql
runtime
com.fasterxml.jackson.core
jackson-databind
2.11.2
org.apache.commons
commons-lang3
3.11
commons-beanutils
commons-beanutils
1.9.4
org.json
json
20201115
org.testcontainers
testcontainers
${testcontainers.version}
test
org.testcontainers
localstack
${testcontainers.version}
test
org.testcontainers
junit-jupiter
${testcontainers.version}
test
org.testcontainers
postgresql
${testcontainers.version}
test
< /code>
Мой тестовый класс: < /p>
Код: Выделить всё
@Testcontainers
@Sql(scripts = {"file:src/test/resources/schema.sql","file:src/test/resources/data.sql"})
class ApplicationTests {
@Container
static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12")
.withUsername("testcontainers")
.withPassword("testcontainers")
.withDatabaseName("tescontainers");
@Test
void testPostgreSQLModule() throws SQLException {
try (Connection connection = DriverManager
.getConnection(postgreSQLContainer.getJdbcUrl(), "testcontainers", "testcontainers");
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM table_from_schema")) {
try (ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
System.out.println(resultSet.getString("column1"));
}
}
}
}
}
< /code>
Я просто пытаюсь протестировать db. < /p>
Однако, когда я запускаю тест, он не говоря уже о том, что < /p>
org.postgresql.util.PSQLException: ERROR: relation "table_from_schema" does not exist
< /code>
Я попытался отладить его, то есть остановился прямо в моем тесте (testpostgresqlmodule). Я вижу компонент Docker с Postgres. < /P>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc3ff1e04ceb postgres:12 "docker-entrypoint.s…" 16 seconds ago Up 15 seconds
tescontainers=# \dt
Did not find any relations.
tescontainers=#
< /code>
По сути, мои файлы не запускаются. < /p>
Аннотация @SQL на уровне класса не работает с инициализацией TestContainers, как в моем случае? Тем не менее, у меня есть много данных для инициализации, и файл слишком велик (и будет расти), поэтому я разделяю DDL (схемы) и вставки (данные). Теперь моя проблема заключается в том, как запустить несколько файлов init (schema.sql, data.sql), используя «internitscript»? Поэтому я пытаюсь аннотация @SQL, но она, кажется, не работает. Если кто-то может направлять, пожалуйста? (функции и т. Д.). Таким образом, пробуйте TestContainers. Следовательно, для test (только) мне нужен новый DB в памяти со всеми схемами/данными (которые я могу предоставить с помощью файлов SQL), чтобы во время теста загрузка должна использовать этот тест DB, и соответствующие тесты будут работать на основе этих начальных данных. Инициализация теста DB (до любых тестов). Есть идеи о том, что лучше всего подходит?
Подробнее здесь: https://stackoverflow.com/questions/679 ... postgresql
Мобильная версия