🍊
翻译橙
🍊返回主站🤖参与贡献
  • hello,这里是翻译橙
  • spring boot参考文档
    • 1. 法律
    • 2. 寻求帮助
    • 3. 文档概述
    • 4. 入门
    • 5. 升级Spring Boot
    • 6. 使用 Spring Boot 进行开发
      • 6.1. 构建系统
      • 6.2. 构建你的代码
      • 6.3. 配置类
      • 6.4. 自动配置
      • 6.5. Spring Bean 和依赖注入
      • 6.6. 使用@SpringBootApplication注解
      • 6.7. 运行您的应用程序
      • 6.8. 开发者工具
      • 6.9. 打包您的生产应用程序
      • 6.10. 接下来读什么
    • 7.核心特性
      • 7.1. SpringApplication
      • 7.2. 外部化配置
      • 7.3.Profile配置
      • 7.4.日志记录
      • 7.5.国际化
      • 7.6 面向切面的编程
      • 7.7. JSON
      • 7.8. 任务执行与调度
      • 7.9. 单元测试
        • 7.9.1. 测试范围依赖
        • 7.9.2. 测试 Spring 应用程序
        • 7.9.3. 测试 Spring Boot 应用程序
        • 7.9.4. 测试容器
        • 7.9.5. 测试工具
      • 7.10. Docker Compose 支持
      • 7.11. 测试容器支持
      • 7.12. 创建您自己的自动配置
      • 7.13. Kotlin 支持
      • 7.14 SSL
      • 7.15.接下来要读什么
    • 8. 网络
      • 8.1. Servlet Web 应用程序
        • 8.1.1. “Spring Web MVC 框架”
        • 8.1.2. JAX-RS 和Jersey
        • 8.1.3. 嵌入式 Servlet 容器支持
      • 8.2 反应式网络应用程序
        • 8.2.1. “Spring WebFlux 框架”
        • 8.2.2. 嵌入式反应式服务器支持
        • 8.2.3. 反应式服务器资源配置
      • 8.3. 优雅关机
      • 8.4. spring安全
        • 8.4.1. MVC安全
        • 8.4.2. WebFlux 安全
        • 8.4.3. OAuth2
        • 8.4.4. SAML 2.0
      • 8.5. spring 会话
      • 8.6.GraphQL
      • 8.7. Spring HATEOAS
      • 8.8.接下来读什么
    • 9. 数据
      • 9.1. SQL数据库
      • 9.2. 使用 NoSQL 技术
      • 9.3. 接下来读什么
    • 10. 消息
      • 10.1. JMS
      • 10.2. AMQP
      • 10.3. Apache Kafka 支持
      • 10.4. Apache Pulsar 支持
      • 10.5. RSocket
      • 10.6. Spring Integration
      • 10.7. WebSockets
      • 10.8. What to Read Next
    • 11. IO
      • 11.1. 缓存
      • 11.2. Hazelcast
      • 11.3. Quartz 调度程序
      • 11.4. 发送电子邮件
      • 11.5. 验证
      • 11.6. 调用 REST 服务
      • 11.7. web services
      • 11.8. 使用 JTA 进行分布式事务
      • 11.9. 接下来读什么
    • 12. 容器镜像
  • Spring核心功能
    • 1.IOC容器和Bean简介
      • 1.2. 容器概述
      • 1.3. Bean概述
      • 1.4. 依赖项
        • 1.4.1. 依赖注入
        • 1.4.2. 详细的依赖关系和配置
        • 1.4.3. 使用depends-on
        • 1.4.4. 延迟初始化的 Bean
        • 1.4.5. 自动装配协作者
        • 1.4.6. 方法注入
    • 2. Resources
      • 2.1. 介绍
      • 2.2. Resource接口
      • 2.3. 内置Resource实现
      • 2.4. ResourceLoader接口
      • 2.5. ResourcePatternResolver接口
      • 2.6. ResourceLoaderAware接口
      • 2.7. 资源作为依赖
      • 2.8. 应用程序上下文和资源路径
    • 3. 验证、数据绑定和类型转换
      • 3.1. 使用 Spring 的 Validator 接口进行验证
      • 3.2. 将代码解析为错误消息
      • 3.3. Bean 操作和BeanWrapper
      • 3.4. spring类型转换
      • 3.5. spring字段格式
      • 3.6. 配置全局日期和时间格式
      • 3.7. Java Bean 验证
    • 4. SpEL表达式
    • 5. Spring 面向切面编程
      • 5.1. AOP 概念
      • 5.2. Spring AOP 的能力和目标
      • 5.3. AOP 代理
      • 5.4. @AspectJ 支持
        • 5.4.1. 启用@AspectJ 支持
        • 5.4.2. 声明一个切面
        • 5.4.3. 声明切入点
        • 5.4.4. 声明切点
        • 5.4.5. 切面说明
        • 5.4.6. 切面实例化模型
        • 5.4.7. AOP 示例
      • 5.5. 基于模式的 AOP 支持
      • 5.6. 选择要使用的 AOP 声明样式
      • 5.7. 混合切面类型
      • 5.8. 代理机制
      • 5.9. @AspectJ 代理的程序化创建
      • 5.10. 在 Spring 应用程序中使用 AspectJ
      • 5.11.更多资源
    • 6. Spring AOP API
      • 6.1. Spring中的切入点API
      • 6.2. Spring 中的 Advice API
      • 6.3. Spring 中的 Advisor API
      • 6.4. 使用ProxyFactoryBean创建 AOP 代理
      • 6.5. 简洁的代理定义
      • 6.6. 以编程方式创建 AOP 代理ProxyFactory
      • 6.7. 操作切面对象
      • 6.8. 使用“自动代理”工具
      • 6.9. 使用TargetSource实现
      • 6.10. 定义新的切面类型
    • 7. 空指针安全
    • 8. 数据缓冲器和编解码器
    • 9. 日志
    • 10. 附录
      • 10.1. XML 模式
      • 10.2. 自定义XML Schema
        • 10.2.1. 创作 Schema
        • 10.2.2. 编码一个NamespaceHandler
        • 10.2.3. 使用BeanDefinitionParser
        • 10.2.4. 注册处理程序和模式
        • 10.2.5. 在 Spring XML 配置中使用自定义扩展
        • 10.2.6. 更详细的例子
      • 10.3. 应用程序启动步骤
  • 使用redis实现分布式锁
  • Java 安全标准算法名称
  • JDK 9 JEP
  • JDK 10 JEP
  • 人件
    • 《人件》
    • 第一部分 管理人力资源
      • 01 此时此刻,一个项目正在走向失败
      • 02 干酪汉堡,做一个,卖一个
      • 03 维也纳在等你
      • 04 质量——如果时间允许
      • 05 再谈帕金森定律
      • 06 苦杏素
    • 第二部分 办公环境
      • 07 家具警察
      • 08 “朝九晚五在这里啥也完成不了。”
      • 09 在空间上省钱
      • 间奏曲:生产效率度量和不明飞行物
      • 10 大脑时问与身体时间
      • 11 电话
      • 12 门的回归
      • 13 采取保护步骤
    • 第三部分 正确的人
      • 14 霍恩布洛尔因素
      • 15 谈谈领导力
      • 16 雇一名杂耍演员
      • 17 与他人良好合作
      • 18 童年的终结
      • 19 在这儿很开心
      • 20 人力资本
    • 第四部分 高效团队养成
      • 21 整体大于部分之和
      • 22 黑衣团队
      • 23 团队自毁
      • 24 再谈团队自毁
      • 25 竞争
      • 26 一顿意面晚餐
      • 27 敞开和服
      • 28 团队形成的化学反应
    • 第五部分 沃土
      • 29 自我愈复系统
      • 30 与风险共舞
      • 3l 会议、独白和交流
      • 32 终极管理罪恶得主是……
      • 33 “邪恶”电邮
      • 34 让改变成为可能
      • 35 组织型学习
      • 36 构建社区
    • 第六部分 快乐地工作
      • 37 混乱与秩序
      • 38 自由电子
      • 39 霍尔加·丹斯克
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. spring boot参考文档
  2. 7.核心特性
  3. 7.9. 单元测试

7.9.4. 测试容器

上一页7.9.3. 测试 Spring Boot 应用程序下一页7.9.5. 测试工具

最后更新于1年前

这有帮助吗?

库提供了一种管理 Docker 容器内运行的服务的方法。它与 JUnit 集成,允许您编写一个测试类,该测试类可以在任何测试运行之前启动容器。Testcontainers 对于编写与真实后端服务(例如 MySQL、MongoDB、Cassandra 等)通信的集成测试特别有用。

测试容器可以在 Spring Boot 测试中使用,如下所示:

@Testcontainers
@SpringBootTest
class MyIntegrationTests {
​
    @Container
    static Neo4jContainer<?> neo4j = new Neo4jContainer<>("neo4j:5");
​
    @Test
    void myTest() {
        // ...
    }
​
}

这将在运行任何测试之前启动一个运行 Neo4j 的 docker 容器(如果 Docker 在本地运行)。在大多数情况下,您需要配置应用程序以连接到容器中运行的服务。

服务连接

服务连接是与任何远程服务的连接。Spring Boot 的自动配置可以使用服务连接的详细信息,并使用它们来建立与远程服务的连接。执行此操作时,连接详细信息优先于任何与连接相关的配置属性。

使用测试容器时,可以通过注释测试类中的容器字段来自动为容器中运行的服务创建连接详细信息。

@Testcontainers
@SpringBootTest
class MyIntegrationTests {
​
    @Container
    @ServiceConnection
    static Neo4jContainer<?> neo4j = new Neo4jContainer<>("neo4j:5");
​
    @Test
    void myTest() {
        // ...
    }
​
}

由于@ServiceConnection,上述配置允许应用程序中与 Neo4j 相关的 bean 与 Testcontainers 管理的 Docker 容器内运行的 Neo4j 进行通信。这是通过自动定义一个Neo4jConnectionDetailsbean 来完成的,然后由 Neo4j 自动配置使用该 bean,覆盖任何与连接相关的配置属性。

您需要将该spring-boot-testcontainers模块添加为测试依赖项,以便将服务连接与测试容器一起使用。

服务连接注解由注册到spring.factories 的 ContainerConnectionDetailsFactory 类处理。 ContainerConnectionDetailsFactory 可以基于特定的 Container 子类或 Docker 映像名称创建 ConnectionDetailsbean。

spring-boot-testcontainersjar中提供了以下服务连接工厂:

连接详情

匹配于

ActiveMQConnectionDetails

名为“symptoma/activemq”的容器

CassandraConnectionDetails

容器类型CassandraContainer

CouchbaseConnectionDetails

容器类型CouchbaseContainer

ElasticsearchConnectionDetails

容器类型ElasticsearchContainer

FlywayConnectionDetails

容器类型JdbcDatabaseContainer

JdbcConnectionDetails

容器类型JdbcDatabaseContainer

KafkaConnectionDetails

类型KafkaContainer或RedpandaContainer的容器

LiquibaseConnectionDetails

容器类型JdbcDatabaseContainer

MongoConnectionDetails

容器类型MongoDBContainer

Neo4jConnectionDetails

容器类型Neo4jContainer

OtlpMetricsConnectionDetails

名为“otel/opentelemetry-collector-contrib”的容器

OtlpTracingConnectionDetails

名为“otel/opentelemetry-collector-contrib”的容器

PulsarConnectionDetails

容器类型PulsarContainer

R2dbcConnectionDetails

类型为MariaDBContainer、MSSQLServerContainer、MySQLContainer、OracleContainer或PostgreSQLContainer的容器

RabbitConnectionDetails

容器类型RabbitMQContainer

RedisConnectionDetails

名为“redis”的容器

ZipkinConnectionDetails

名为“openzipkin/zipkin”的容器

默认情况下,将为给定的Container创建所有适用的连接详细信息 bean 。例如, PostgreSQLContainer将创建JdbcConnectionDetails和R2dbcConnectionDetails。

如果您只想创建适用类型的子集,则可以使用type的属性@ServiceConnection。

默认情况下Container.getDockerImageName()用于获取用于查找连接详细信息的名称。只要 Spring Boot 能够获取Container 的实例,这种情况就有效,就像使用上面示例中的static字段时的情况一样。

如果您使用@Bean方法,Spring Boot 将不会调用 bean 方法来获取 Docker 映像名称,因为这会导致急切的初始化问题。相反,bean 方法的返回类型用于找出应使用哪个连接详细信息。只要您使用类型化容器(例如Neo4jContainer或 RabbitMQContainer) ,此方法就有效。如果您正在使用(例如 Redis),GenericContainer将停止工作,如以下示例所示:

@TestConfiguration(proxyBeanMethods = false)
public class MyRedisConfiguration {
​
    @Bean
    @ServiceConnection(name = "redis")
    public GenericContainer<?> redisContainer() {
        return new GenericContainer<>("redis:7");
    }
​
}

Spring Boot 无法判断GenericContainer使用的是哪个容器映像,因此必须使用@ServiceConnection的name 属性来提供该提示。

您还可以使用@ServiceConnection 的name属性来覆盖将使用的连接详细信息,例如在使用自定义图像时。如果您使用 Docker 映像registry.mycompany.com/mirror/myredis,则需要@ServiceConnection(name="redis")确保RedisConnectionDetails已创建。

动态属性

服务连接的一个稍微详细但也更灵活的替代方案是@DynamicPropertySource。静态@DynamicPropertySource方法允许向 Spring 环境添加动态属性值。

@Testcontainers
@SpringBootTest
class MyIntegrationTests {
​
    @Container
    static Neo4jContainer<?> neo4j = new Neo4jContainer<>("neo4j:5");
​
    @Test
    void myTest() {
        // ...
    }
​
    @DynamicPropertySource
    static void neo4jProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.neo4j.uri", neo4j::getBoltUrl);
    }
​
}

上述配置允许应用程序中与 Neo4j 相关的 bean 与 Testcontainers 管理的 Docker 容器内运行的 Neo4j 进行通信。

Testcontainers