Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TestContainers和错误:";无法验证连接org.postgresql.jdbc.PgConnection“;(为所有测试类别提升单个容器)_Postgresql_Spring Boot_Docker_Integration Testing_Testcontainers - Fatal编程技术网

TestContainers和错误:";无法验证连接org.postgresql.jdbc.PgConnection“;(为所有测试类别提升单个容器)

TestContainers和错误:";无法验证连接org.postgresql.jdbc.PgConnection“;(为所有测试类别提升单个容器),postgresql,spring-boot,docker,integration-testing,testcontainers,Postgresql,Spring Boot,Docker,Integration Testing,Testcontainers,当我试图一个接一个地运行测试时,我遇到了一个问题。 数据库连接已关闭 根据文档(),我试图确保我的容器在所有测试中都被提升一次 我专门使用它来为Spring创建应用程序上下文,并一次生成一个测试容器,用于所有测试 确实如此,因为我在每次测试中都会进行检查: boolean running=getPostgreSQLContainer().isRunning(); System.out.println(正在运行); 也就是说,测试会一个接一个地自动运行 pom.xml org.spring

当我试图一个接一个地运行测试时,我遇到了一个问题。 数据库连接已关闭

根据文档(),我试图确保我的容器在所有测试中都被提升一次

我专门使用它来为Spring创建应用程序上下文,并一次生成一个测试容器,用于所有测试

确实如此,因为我在每次测试中都会进行检查:

boolean running=getPostgreSQLContainer().isRunning();
System.out.println(正在运行);
也就是说,测试会一个接一个地自动运行

  • pom.xml

org.springframework.boot
spring启动程序父级
2.4.1
....
11
1.15.1
UTF-8
UTF-8
1.4.1.最终版本
3.8.1
1.86
2.2.6.1发布
org.testcontainers
postgresql
测试
org.mapstruct
映射结构
${version.mapstruct}
org.mapstruct
mapstruct处理器
${version.mapstruct}
假如
org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
弹簧启动启动器数据rest
org.springframework.boot
SpringBootStarterWeb
org.liquibase
液化酶核心
org.postgresql
postgresql
运行时
org.springframework.boot
弹簧靴起动器
org.springframework.boot
弹簧起动试验
测试
org.testcontainers
朱尼特朱庇特
测试
org.testcontainers
测试容器bom表
${testcontainers.version}
聚甲醛
进口
org.springframework.boot
springbootmaven插件
  • TestPostgresContainer
@Testcontainers
@TestPropertySource(“类路径:application.properties”)
公共类TestPostgresContainer{
私有静态字符串数据库名;
私有静态字符串userNameBase;
私有静态字符串密码库;
公共测试PostgresContainer(){
}
私有静态DockerImageName postgres;
静止的{
postgres=dockeriagename.parse(“postgres:13.1”);
dataBaseName=PropertiesExtractor.getProperty(“database.name.test.container”);
userNameBase=PropertiesExtractor.getProperty(“username.testcontainer”);
passwordBase=PropertiesExtractor.getProperty(“password.testcontainer”);
}
@抑制警告(“原始类型”)
@容器
私有静态PostgreSQLContainer PostgreSQLContainer=(PostgreSQLContainer)新PostgreSQLContainer(postgres)
.withDatabaseName(数据库名称)
.withUsername(userNameBase)
.withPassword(密码库)
.具有启动超时(持续时间为秒(600));
@抑制警告(“原始类型”)
公共静态PostgreSQLContainer getPostgreSQLContainer(){
返回postgreSQLContainer;
}
/**
*它需要弹簧靴2.2.6及更高版本。
*/
@动态属性源
静态空洞属性(DynamicPropertyRegistry属性Registry){
add(“spring.datasource.url”,postgreSQLContainer::getJdbcUrl);
add(“spring.datasource.username”,postgreSQLContainer::getUsername);
add(“spring.datasource.password”,postgreSQLContainer::getPassword);
}
  • TestContainers SpringBootClassRuleApplicationTests

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=SpringBootTest.webEnvironment.RANDOM\u端口)
公共类TestContainers SpringBootClassRuleApplicationTests扩展TestPostgresContainer{
@自动连线
受保护的TestRestTemplate TestRestTemplate;
@试验
@DisplayName(“应启动容器”)
公开无效测试(){
boolean running=getPostgreSQLContainer().isRunning();
System.out.println(正在运行);
}
}
  • 雇员控制测试
class EmployeeRestControllerTest扩展TestContainers SpringBootClassRuleApplicationTests{
私人静态雇员对雇员;
@以前
静态void createUser(){
PostgreSQLContainer PostgreSQLContainer=getPostgreSQLContainer();
employeeDto=employeeDto
.newBuilder()
.名字(“乔安娜”)
.lastName(“索耶”)
.国家(“德国”)
.build();
}
@交易的
@试验
void addEmployee(){
boolean running=getPostgreSQLContainer().isRunning();
System.out.println(正在运行);
字符串url=“/employees/addEmployee”;
HttpEntity=新的HttpEntity(员工需求到);
响应员工对响应实体的响应=
exchange(url、HttpMethod.POST、entity、EmployeeDto.class);
HttpStatus statusCode=employeeDtoResponseEntity.getStatusCode();
断言(statusCode,is(HttpStatus.OK));
}
@试验
void getAllEmployees(){
}
}
测试类位于不同的目录中

  • 应用程序属性
我使用液化酶

WNN正在运行所有测试:

com.zaxxer.hikari.pool.PoolBase:HikariPool-1-未能生效
spring.main.banner-mode=off
spring.datasource.initialization-mode=always

## PostgreSQL for TestContainers
database.name.test.container=integration-tests-db
username.testcontainer=root
password.testcontainer=root

spring.datasource.hikari.max-life = 600000 

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master-test.xml