测试容器的初始化脚本无法正常工作
Posted
技术标签:
【中文标题】测试容器的初始化脚本无法正常工作【英文标题】:Init Script for Testcontainers doesn't work properly 【发布时间】: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。
日志:https://pastebin.com/qgrPb3JL
【问题讨论】:
您能否添加您的测试类、Testcontainers 版本和测试的日志输出?此外,这份 [Testcontainers 初始化策略概述] 也可能有助于正确设置。 您将初始化脚本存储在哪个位置?src/test/resources
?似乎我没有链接可能对这里有帮助的博文,这里又是overview of initialization strategies with Testcontainers的链接
我发现了问题。空表的原因是我将 spring.jpa.hibernate.ddl-auto 设置为 create-drop 并且它覆盖了由 init 脚本创建的表。现在它起作用了。谢谢。 :)
那是完美的。您可以在 Stack Overflow 上自行回答您的问题并将其标记为正确答案。
酷。好主意。谢谢。 :)
【参考方案1】:
空表的原因是在“create-drop”上设置了“spring.jpa.hibernate.ddl-auto”属性。 它使得由 init 脚本创建的表和值被 hibernate 生成的新表覆盖。 就我而言,最好的解决方案就是将此属性设置为“无”。
【讨论】:
以上是关于测试容器的初始化脚本无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章