【发布时间】:2021-09-05 08:42:53
【问题描述】:
正如我在标题中提到的,我在使用 Init Script for Testcontainers 时遇到了问题。
脚本内容:
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
}
}
Testcontainers 版本为 1.15.3。
【问题讨论】:
-
您能否添加您的测试类、Testcontainers 版本和测试的日志输出?此外,这份 [Testcontainers 初始化策略概述] 也可能有助于正确设置。
-
您将初始化脚本存储在哪个位置?
src/test/resources?似乎我没有链接可能对这里有帮助的博文,这里又是overview of initialization strategies with Testcontainers的链接 -
我发现了问题。空表的原因是我将 spring.jpa.hibernate.ddl-auto 设置为 create-drop 并且它覆盖了由 init 脚本创建的表。现在它起作用了。谢谢。 :)
-
那是完美的。您可以在 Stack Overflow 上自行回答您的问题并将其标记为正确答案。
-
酷。好主意。谢谢。 :)
标签: java sql spring-boot testcontainers