用途
Quarkus TDD 是一套测试驱动开发(TDD)工作流指南,面向 Quarkus 3.x LTS 服务,目标是在单元测试与集成测试中达到 80% 以上的覆盖率。它特别针对基于 Apache Camel 的事件驱动架构进行了优化。
适用时机
根据资料,以下场景适合使用该工作流:
- 新增功能或 REST 端点
- 修复缺陷或重构
- 添加数据访问逻辑、安全规则或响应式流
- 测试 Apache Camel 路由与事件处理器
- 测试基于 RabbitMQ 的事件驱动服务
- 测试条件流逻辑
- 验证 CompletableFuture 异步操作
- 测试 LogContext 传播
工作流步骤
- 先写测试(此时测试应当失败)
- 实现最小代码使测试通过
- 在测试全绿的前提下重构
- 使用 JaCoCo 强制覆盖率(目标 80% 以上)
主要能力与测试模式
资料展示了以下测试能力与约定:
- 单元测试组织:使用
@Nested类按被测方法分组,@DisplayName提供可读的测试描述,命名采用givenX_whenY_thenZ,并显式使用// ARRANGE、// ACT、// ASSERT注释(AAA 模式)。 - Mockito 使用:通过
@Mock、@InjectMocks、@ExtendWith(MockitoExtension.class)构建单元测试;使用verify()验证方法被正确调用,使用never()验证错误场景下方法未被调用。 - 断言:使用
assertThrows测试异常场景并校验消息,使用assertDoesNotThrow测试成功场景,结合 AssertJ 进行断言。 - 覆盖率:覆盖正常路径、null 输入、边界情况与异常。
Camel 路由测试
资料给出了使用 @QuarkusTest 测试 Camel 路由的示例,涉及:
- 注入
CamelContext与ProducerTemplate - 使用
@InjectMock注入EventService、DocumentValidator等 - 通过
AdviceWith.adviceWith替换真实端点(如将 spring-rabbitmq 替换为mock:rabbitmq) - 使用
MockEndpoint设置期望消息数并用assertIsSatisfied校验 - 测试 JSON 编组(
.marshal().json(JsonLibrary.Jackson))结果 - 测试路由分发(如将 invoice 路由到对应处理器)与校验错误处理
事件服务测试
示例展示了 EventService 的单元测试,包括:
- 创建成功事件并校验事件类型、状态、负载与时间戳
- 创建错误事件并校验错误消息
- 对 null 负载抛出异常、对空白错误消息使用
@ParameterizedTest与@ValueSource校验
CompletableFuture 测试
示例展示了 FileStorageService 的异步测试,包括:
- 使用
doAnswer让ExecutorService同步执行以便异常传播 - 校验上传成功返回的文档信息
- 校验 S3 上传失败时
CompletableFuture以CompletionException失败并包含原因 - 校验 LogContext 传播到异步操作
限制
资料未提供关于该工作流的安装命令、依赖版本、平台要求、收费或价格等信息,这些内容暂未提供。