Java TestContainers embedded db找不到表
我已使用以下设置创建了一个spring boot应用程序: pom.xml: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
<?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");
}
}