簡體   English   中英

測試容器的初始化腳本無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM