用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/yoursweakfoe/ywf-ddd-java --skill new-test命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | new-test |
| description | 为已有聚合、Handler、Domain 模型或基础设施组件编写测试。当需要补充单元测试或集成测试时使用。 |
ywf-ddd-common/docs/common-test.md(测试基础设施 + ArchUnit 规则)ywf-ddd-common/common-ddd/src/test/(Fixture 模式参照).agents/rules/03-coding-conventions.md(命名规范)位置:src/test/java/.../application/{agg}/handler/{Action}{Agg}HandlerTest.java
@ExtendWith(MockitoExtension.class)
class PayOrderHandlerTest {
@Mock
private OrderRepository orderRepository;
@Mock
private OrderAssembler orderAssembler;
@InjectMocks
private PayOrderHandler handler;
@Test
void handle_shouldTransitionToPaid() {
// Given
Order order = new Order(UUID.randomUUID(), List.of(item), "customer-1");
when(orderRepository.findById(any())).thenReturn(Optional.of(order));
when(orderAssembler.toDTO(any())).thenReturn(new OrderDTO());
// When
OrderDTO result = handler.handle(new PayOrderCommand(order.getId()));
// Then
assertThat(order.getStatus()).isEqualTo(OrderStatus.PAID);
verify(orderRepository).update(order);
}
@Test
void handle_shouldThrowWhenNotFound() {
when(orderRepository.findById(any())).thenReturn(Optional.empty());
assertThatThrownBy(() -> handler.handle(new PayOrderCommand(UUID.randomUUID())))
.isInstanceOf(BusinessException.class);
}
}
位置:src/test/java/.../domain/{agg}/model/{Agg}Test.java
class OrderTest {
@Test
void pay_shouldTransitionFromPendingToPaid() {
Order order = new Order(UUID.randomUUID(), List.of(item), "customer-1");
order.pay();
assertThat(order.getStatus()).isEqualTo(OrderStatus.PAID);
}
@Test
void pay_shouldThrowWhenNotPending() {
Order order = new Order(UUID.randomUUID(), List.of(item), "customer-1");
order.pay(); // PENDING → PAID
assertThatThrownBy(order::pay)
.isInstanceOf(BusinessException.class);
}
@Test
void validate_shouldThrowWhenItemsEmpty() {
Order order = new Order(UUID.randomUUID(), List.of(), "customer-1");
assertThatThrownBy(order::validate)
.isInstanceOf(BusinessException.class);
}
}
位置:src/test/java/.../infrastructure/persistence/{ds}/{agg}/converter/{Agg}ConverterTest.java
class OrderConverterTest {
private final OrderConverter converter = new OrderConverter();
@Test
void toDomain_and_toPO_shouldRoundTrip() {
OrderPO po = buildOrderPO();
Order domain = converter.toDomain(po);
OrderPO result = converter.toPO(domain);
assertThat(result.getId()).isEqualTo(po.getId());
assertThat(result.getStatus()).isEqualTo(po.getStatus());
}
@Test
void toDomain_shouldThrowOnInvalidJson() {
OrderPO po = buildOrderPO();
po.setItems("invalid-json{{{");
assertThatThrownBy(() -> converter.toDomain(po))
.isInstanceOf(IllegalStateException.class);
}
}
位置:src/test/java/.../integration/{Feature}IntegrationTest.java
@SpringBootTest
@ActiveProfiles("test")
class OrderFlowIntegrationTest {
@Autowired
private OrderAppService orderAppService;
@Test
void placeOrder_then_payOrder_shouldSucceed() {
// Given → When → Then(完整业务流)
}
}
common-ddd/src/test/.../fixtures/OrderFixtures.javafixtures/ 包存放共享测试数据create{Agg}() / build{Agg}PO()| 类型 | 命名 | 示例 |
|---|---|---|
| 测试类 | {ClassName}Test | PayOrderHandlerTest |
| 测试方法 | {method}_should{Expected} | handle_shouldThrowWhenNotFound |
| Fixture | {Agg}Fixtures | OrderFixtures |
mvn test -pl {module} 全部通过assertThat / assertThatThrownBy)@Autowired 字段注入(测试类用 @Mock + @InjectMocks)ywf-ddd-common/docs/common-test.md