为 Quarkus 3.x 项目提供测试驱动开发方案,支持功能开发、修复与重构。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "quarkus-tdd" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/quarkus-tdd/SKILL.md 2. 保存为 ~/.claude/skills/quarkus-tdd/SKILL.md 3. 装好后重载技能,告诉我可以用了
请用 Quarkus 3.x 的 TDD 方式为一个“创建订单”REST API 设计实现步骤:先写 JUnit 5 与 REST Assured 测试,再补最小实现,使用 Mockito 模拟仓储层,并给出目录结构与示例代码。
输出按红绿重构流程组织的测试与实现示例,包含接口测试、服务层 mock、最小可运行代码与项目结构。
我有一个基于 Camel 的 Quarkus 事件处理服务,消费消息时会重复入库。请用 TDD 方法先编写能复现问题的测试,再给出修复方案,包含 Camel 测试、Mockito 模拟与回归测试。
输出缺陷复现测试、修复思路与回归测试用例,帮助验证重复入库问题已被可靠解决。
请针对一个已有的 Quarkus 3.x 服务提出 TDD 驱动的重构方案:识别可重构点,补充 JUnit 5、Mockito 和 REST Assured 测试,并配置 JaCoCo 生成覆盖率报告,目标覆盖率 80% 以上。
输出分步骤重构计划、测试补充建议、JaCoCo 配置示例及覆盖率提升路径。
TDD guidance for Quarkus 3.x services with 80%+ coverage (unit + integration). Optimized for event-driven architectures with Apache Camel.
Follow this structured approach for comprehensive, readable tests:
@ExtendWith(MockitoExtension.class)
@DisplayName("OrderService Unit Tests")
class OrderServiceTest {
@Mock
private OrderRepository orderRepository;
@Mock
private EventService eventService;
@Mock
private FulfillmentPublisher fulfillmentPublisher;
@InjectMocks
private OrderService orderService;
private CreateOrderCommand validCommand;
@BeforeEach
void setUp() {
validCommand = new CreateOrderCommand(
"customer-123",
List.of(new OrderLine("sku-123", 2))
);
}
@Nested
@DisplayName("Tests for createOrder")
class CreateOrder {
@Test
@DisplayName("Should persist order and publish fulfillment event")
void givenValidCommand_whenCreateOrder_thenPersistsAndPublishes() {
// ARRANGE
doNothing().when(orderRepository).persist(any(Order.class));
// ACT
OrderReceipt receipt = orderService.createOrder(validCommand);
// ASSERT
assertThat(receipt).isNotNull();
assertThat(receipt.customerId()).isEqualTo("customer-123");
verify(orderRepository).persist(any(Order.class));
verify(fulfillmentPublisher).publishAsync(receipt);
verify(eventService).createSuccessEvent(receipt, "ORDER_CREATED");
}
@Test
@DisplayName("Should reject missing customer id")
void givenMissingCustomerId_whenCreateOrder_thenThrowsBadRequest() {
// ARRANGE
CreateOrderCommand invalid = new CreateOrderCommand("", validCommand.lines());
// ACT & ASSERT
WebApplicationException exception = assertThrows(
WebApplicationException.class,
() -> orderService.createOrder(invalid)
);
assertThat(exception.getResponse().getStatus()).isEqualTo(400);
verify(orderRepository, never()).persist(any(Order.class));
verify(fulfillmentPublisher, never()).publishAsync(any());
}
@Test
@DisplayName("Should record error event when persistence fails")
void givenPersistenceFailure_whenCreateOrder_thenRecordsErrorEvent() {
// ARRANGE
doThrow(new PersistenceException("database unavailable"))
.when(orderRepository).persist(any(Order.class));
// ACT & ASSERT
PersistenceException exception = assertThrows(
PersistenceException.class,
() -> orderService.createOrder(validCommand)
);
assertThat(exception.getMessage()).contains("database unavailable");
verify(eventService).createErrorEvent(
eq(validCommand),
eq("ORDER_CREATE_FAILED"),
contains("database unavailable")
);
verify(fulfillmentPublisher, never()).publishAsync(any());
}
@Test
@DisplayName("Should reject null commands")
void givenNullCommand_whenCreateOrder_thenThrowsNullPointerException() {
// ACT & ASSERT
assertThrows(
NullPointerException.class,
() -> orderService.createOrder(null)
);
verify(orderRepository, never()).persist(any(Order.class));
}
}
}
givenX_whenY_thenZ for clarity…
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
提供 Quarkus 3.x 与 Camel 的后端架构模式与实现指导,支持事件驱动开发。