[英]How to properly maintain data for Testcontainers in init script?
[英]Init Script for Testcontainers doesn't work properly
正如我在標題中提到的,我在測試容器的初始化腳本方面遇到了問題。
腳本內容:
CREATE SCHEMA IF NOT EXISTS dbo_core;
CREATE TABLE IF NOT EXISTS dbo_core.company (
ID BIGINT generated by default as identity primary key,
NAME VARCHAR(255) not null
);
INSERT INTO dbo_core.company (ID, NAME) VALUES (1, 'Company1');
通過命令查看docker內部后:
docker exec -it cranky_ramanujan psql -Utest
結果是:
test=# select * from dbo_core.company;
id | name
----+------
(0 rows)
有人知道我應該改進什么嗎? 先感謝您。 :)
編輯。
CompanyDaoTest.java:
@RunWith(SpringRunner.class)
@Testcontainers
@SpringBootTest(classes = OutCaloriesCoreApplication.class)
public class CompanyDaoTest {
@Container
public static PostgreSQLContainer<OutCaloriesPostgresqlContainer> postgreSQLContainer = OutCaloriesPostgresqlContainer.getInstance().withInitScript("db-init-script.sql");
@Autowired
private CompanyDao companyDao;
@BeforeAll
static void init() {
postgreSQLContainer.start();
}
@Test
@Transactional
void findByIdShouldEndWithSuccess() {
Company byId = companyDao.findById(1L);
assertEquals(byId.getId(), 1L);
}
}
OutCaloriesPostgresqlContainer.java:
public class OutCaloriesPostgresqlContainer extends PostgreSQLContainer<OutCaloriesPostgresqlContainer> {
private static final String IMAGE_VERSION = "postgres:11.1";
private static OutCaloriesPostgresqlContainer container;
private OutCaloriesPostgresqlContainer() {
super(IMAGE_VERSION);
}
public static OutCaloriesPostgresqlContainer getInstance() {
if (container == null) {
container = new OutCaloriesPostgresqlContainer();
}
return container;
}
@Override
public void start() {
super.start();
System.setProperty("DB_URL", container.getJdbcUrl());
System.setProperty("DB_USERNAME", container.getUsername());
System.setProperty("DB_PASSWORD", container.getPassword());
}
@Override
public void stop() {
//do nothing, JVM handles shut down
}
}
測試容器版本是 1.15.3。
日志: https : //pastebin.com/qgrPb3JL
空表的原因是在“create-drop”上設置了“spring.jpa.hibernate.ddl-auto”屬性。 它使 init 腳本創建的表和值被 hibernate 生成的新表覆蓋。
就我而言,最好的解決方案是將此屬性設置為“無”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.