Java TestContainers embedded db找不到表

Java TestContainers embedded db找不到表,java,spring-boot,docker,testing,Java,Spring Boot,Docker,Testing,我已使用以下设置创建了一个spring boot应用程序: pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca

我已使用以下设置创建了一个spring boot应用程序:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com</groupId>
    <artifactId>ticket</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ticket</name>
    <description>ticketing microservice</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-envers</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>7.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>com.github.cliftonlabs</groupId>
            <artifactId>json-simple</artifactId>
            <version>3.1.1</version>
        </dependency>
    <!-- test -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
        <version>3.0.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.testcontainers</groupId>
        <artifactId>testcontainers</artifactId>
        <version>1.14.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.playtika.testcontainers</groupId>
        <artifactId>embedded-postgresql</artifactId>
        <version>1.43</version>
        <scope>test</scope>
    </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
应用程序测试属性

spring.datasource.url=jdbc:postgresql://${embedded.postgresql.host}:${embedded.postgresql.port}/${embedded.postgresql.schema}
spring.datasource.username=${embedded.postgresql.user}
spring.datasource.password=${embedded.postgresql.password}
spring.jpa.hibernate.ddl-auto=create
我的简单测试类:

@AutoConfigureMockMvc
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class TicketControllerTest {


    @LocalServerPort
    private int port;

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void getInfoTest() throws Exception {
        assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/tickets/info",
                String.class)).contains("ghix-ticket");
    }
    @Test
    public void postTicket() throws Exception {
        UserTicket rt = new UserTicket();
        rt.setDetails("Details test");
        rt.setSubject("subject test");
        rt.setCreatedBy("1");
        rt.setCategory("Verify Death");
        rt.setType("Document Verification");
        rt.setRole("2025");
        TkmTickets responseT = this.restTemplate.postForObject("http://localhost:" + port + "/tickets/",
                rt, TkmTickets.class);
        System.out.println(responseT.getId());
        assertThat(responseT.getDescription()).isEqualTo("Details test");
    }


}
启动时情况看起来不错:

10:23:46.877[main]调试org.springframework.core.env.StandardEnvironment-激活配置文件[test]
10:23:46.881[main]DEBUG org.springframework.test.context.support.TestPropertySourceUtils-将内联属性添加到环境:{spring.jmx.enabled=false,org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true,server.port=0}
2021-04-07 10:23:47.419信息27556---[main]嵌入式PostgreSqlBootstrapConfiguration:正在启动postgresql server。Docker图片:postgres
2021-04-07 10:23:47.469信息27556---[main]o.t.d.DockerClientProviderStrategy:Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties,将首先尝试它
2021-04-07 10:23:47.833信息27556---[main]o.t.d.UnixSocketClientProvider策略:使用本地Unix套接字访问docker
2021-04-07 10:23:47.833信息27556---[main]o.t.d.DockerClientProviderStrategy:找到带有本地Unix套接字的Docker环境(unix:///var/run/docker.sock)
2021-04-07 10:23:47.949信息27556---[main]org.testcontainers.DockerClientFactory:Docker主机IP地址是localhost
2021-04-07 10:23:47.991信息27556---[main]org.testcontainers.DockerClientFactory:连接到docker:
服务器版本:20.10.3
API版本:1.41
操作系统:Docker桌面
总内存:1989 MB
2021-04-07 10:23:48.250信息27556---[main]o.t.utility.RegistryAuthLocator:凭证帮助程序/存储(docker凭证桌面)没有quay.io的凭证
2021-04-07 10:23:48.758信息27556---[main]org.testcontainers.DockerClientFactory:Ryuk started-将在JVM退出时监视和终止testcontainers
2021-04-07 10:23:48.758信息27556---[main]org.testcontainers.DockerClientFactory:正在检查系统。。。
2021-04-07 10:23:48.759信息27556---[main]org.testcontainers.DockerClientFactory:✔︎ Docker服务器版本应至少为1.6.0
2021-04-07 10:23:48.865信息27556---[main]org.testcontainers.DockerClientFactory:✔︎ Docker环境应具有超过2GB的可用磁盘空间

2021-04-07 10:23:48.873信息27556---[main]您不必使用Dockerfile,但需要定义用户名并将其传递给Docker容器,密码和数据库名称作为参数请帮助共享您的docker运行命令我已添加docker文件和docker compose文件。但是,当通过mvnWhere data.sql脚本运行时,会发生这种情况?这将如何应用于您的数据库?您是否使用一些模式管理器?
@AutoConfigureMockMvc
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class TicketControllerTest {


    @LocalServerPort
    private int port;

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void getInfoTest() throws Exception {
        assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/tickets/info",
                String.class)).contains("ghix-ticket");
    }
    @Test
    public void postTicket() throws Exception {
        UserTicket rt = new UserTicket();
        rt.setDetails("Details test");
        rt.setSubject("subject test");
        rt.setCreatedBy("1");
        rt.setCategory("Verify Death");
        rt.setType("Document Verification");
        rt.setRole("2025");
        TkmTickets responseT = this.restTemplate.postForObject("http://localhost:" + port + "/tickets/",
                rt, TkmTickets.class);
        System.out.println(responseT.getId());
        assertThat(responseT.getDescription()).isEqualTo("Details test");
    }


}