$ loading_
帮助开发者用 Quarkus 3.x 实践测试驱动开发与重构验证。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "quarkus-tdd" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/docs/ja-JP/skills/quarkus-tdd/SKILL.md 2. 保存为 ~/.claude/skills/quarkus-tdd/SKILL.md 3. 装好后重载技能,告诉我可以用了
请基于 Quarkus 3.x 为一个用户查询 REST 接口编写测试驱动开发方案:先用 JUnit 5、Mockito 和 REST Assured 写失败测试,再给出最小实现代码,最后补充重构建议与 JaCoCo 覆盖率检查要点。
输出一套先测后写的接口开发方案,包含测试代码、最小实现与覆盖率建议。
我在 Quarkus 3.x 服务中遇到订单状态更新异常,请先根据问题描述设计回归测试,用 JUnit 5 和 Mockito 复现缺陷,再给出修复代码,并说明如何确认修复未破坏现有行为。
输出缺陷复现测试、修复实现以及回归验证步骤。
请为一个基于 Camel 的 Quarkus 事件驱动服务制定重构方案:使用 Camel 测试工具和 JUnit 5 保证消息路由行为不变,补充关键 Mock 策略,并给出 JaCoCo 覆盖率提升建议。
输出可执行的重构测试方案,确保消息流程稳定并提升测试覆盖率。
80%以上のカバレッジ(ユニット+統合)を備えたQuarkus 3.xサービスのTDD指導。Apache Camelを使用したイベント駆動アーキテクチャに最適化。
包括的で読みやすいテストのため、以下の構造化されたアプローチに従います:
@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("createOrder のテスト")
class CreateOrder {
@Test
@DisplayName("有効なコマンドが与えられた場合、注文を永続化してフルフィルメントイベントを発行する")
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("顧客IDが無い場合、BadRequestをスロー")
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("永続化失敗時、エラーイベントを記録")
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("nullコマンドが与えられた場合、NullPointerExceptionをスロー")
void givenNullCommand_whenCreateOrder_thenThrowsNullPointerException() {
// ACT & ASSERT
assertThrows(
NullPointerException.class,
() -> orderService.createOrder(null)
);
verify(orderRepository, never()).persist(any(Order.class));
}
}
}
givenX_whenY_thenZ// ARRANGE, // ACT, // ASSERT コメントverify() でメソッド呼び出しが正しく行われたか確認never() でエラーシナリオでメソッドが呼ばれていないことを確認…
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
提供 Quarkus 3.x 与 Camel 的后端架构模式与实现指导,支持事件驱动开发。