com um clique
test-unit
单元测试代码生成。当用户需要为代码生成单元测试、测试用例、Mock对象,或询问"帮我写单元测试"、"生成测试代码"时使用。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
单元测试代码生成。当用户需要为代码生成单元测试、测试用例、Mock对象,或询问"帮我写单元测试"、"生成测试代码"时使用。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
设计文档评审。当用户需要评审设计文档质量、检查设计合理性、发现设计缺陷,或询问"帮我评审设计文档"、"检查设计质量"时使用。
需求文档评审。当用户需要评审需求文档质量、检查需求完整性、发现需求缺陷,或询问"帮我评审需求文档"、"检查需求质量"时使用。
需求分析文档生成。当用户需要分析需求、生成需求规格说明书、需求文档,或询问“帮我分析这个需求”、“写需求文档”时使用。
现有项目技术架构分析。当用户需要分析老项目技术栈、接手新项目、技术调研,或询问"分析这个项目的技术架构"、"梳理技术栈"时使用。
数据库表结构导出。当用户需要导出数据库结构、生成表结构DDL,或询问"导出表结构"、"导出数据库DDL"时使用。
系统功能设计文档生成。当用户需要生成设计文档、系统设计、技术方案,或询问"帮我写设计文档"、"生成技术设计"时使用。
| name | test-unit |
| description | 单元测试代码生成。当用户需要为代码生成单元测试、测试用例、Mock对象,或询问"帮我写单元测试"、"生成测试代码"时使用。 |
测试代码注释和测试描述必须使用中文,包括 @DisplayName 测试名称、方法注释、场景说明等。
生成高质量的单元测试代码,包括测试用例设计、Mock 对象、断言验证等。
生成单元测试时,可以参考以下文档:
当用户提供待测代码(类/方法/模块),以及可选的设计文档路径或测试范围说明时,生成单元测试代码。
参考设计文档(可选):
design/gen 命令生成的设计文档/projectdocs/design/{project}_design_{timestamp}.md参考代码文件:
分段生成策略:
unit --class=UserService (只生成指定类的测试)unit --method=createUser (只生成指定方法的测试)unit --layer=service (只生成指定层的测试)unit --module=user (生成指定模块的所有测试)unit --scenario=normal,exception (只生成指定场景的测试)@Test
@DisplayName("测试描述")
void testMethod() {
// Arrange
// Act
// Assert
}
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}
assertThat(result)
.isNotNull()
.hasSize(3)
.extracting(User::getName)
.containsExactly("Alice", "Bob", "Charlie");
@SpringBootTest
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}
@Test
@DisplayName("创建用户 - 成功场景")
void testCreateUser_Success() {
// Arrange
UserDTO userDTO = new UserDTO();
userDTO.setName("Alice");
userDTO.setEmail("alice@example.com");
User savedUser = new User();
savedUser.setId(1L);
savedUser.setName("Alice");
when(userRepository.save(any(User.class)))
.thenReturn(savedUser);
// Act
Long userId = userService.createUser(userDTO);
// Assert
assertThat(userId).isEqualTo(1L);
verify(userRepository, times(1)).save(any(User.class));
}
@Test
@DisplayName("创建用户 - 邮箱重复")
void testCreateUser_EmailExists() {
// Arrange
UserDTO userDTO = new UserDTO();
userDTO.setEmail("alice@example.com");
when(userRepository.existsByEmail("alice@example.com"))
.thenReturn(true);
// Act & Assert
assertThatThrownBy(() -> userService.createUser(userDTO))
.isInstanceOf(BusinessException.class)
.hasMessage("邮箱已存在");
verify(userRepository, never()).save(any(User.class));
}
@Test
@DisplayName("创建用户 - 参数为空")
void testCreateUser_NullParameter() {
// Act & Assert
assertThatThrownBy(() -> userService.createUser(null))
.isInstanceOf(IllegalArgumentException.class);
}
}
@Test
@DisplayName("查询用户 - 用户存在")
void testGetUser_UserExists() {
// 测试正常的业务流程
}
@Test
@DisplayName("分页查询 - 页码为0")
void testPageQuery_PageNumZero() {
// 测试边界值
}
@Test
@DisplayName("分页查询 - 每页大小为最大值")
void testPageQuery_MaxPageSize() {
// 测试边界值
}
@Test
@DisplayName("删除用户 - 用户不存在")
void testDeleteUser_UserNotFound() {
// 测试异常情况
}
@Test
@DisplayName("更新用户 - 数据库异常")
void testUpdateUser_DatabaseException() {
// 测试异常情况
}
@Test
@DisplayName("创建用户 - 参数为null")
void testCreateUser_NullParameter() {
// 测试空值处理
}
@Test
@DisplayName("查询用户 - 返回空列表")
void testQueryUsers_EmptyResult() {
// 测试空结果
}
// Mock Repository
@Mock
private UserRepository userRepository;
// Mock 外部服务
@Mock
private EmailService emailService;
// Mock Redis
@Mock
private RedisTemplate<String, Object> redisTemplate;
// 返回特定值
when(userRepository.findById(1L))
.thenReturn(Optional.of(user));
// 返回空值
when(userRepository.findById(999L))
.thenReturn(Optional.empty());
// 抛出异常
when(userRepository.save(any()))
.thenThrow(new DataAccessException("数据库异常"));
// 验证方法被调用
verify(userRepository).save(any(User.class));
// 验证调用次数
verify(emailService, times(2)).sendEmail(anyString());
// 验证从未调用
verify(userRepository, never()).delete(any());
// 验证调用顺序
InOrder inOrder = inOrder(userRepository, emailService);
inOrder.verify(userRepository).save(any());
inOrder.verify(emailService).sendEmail(anyString());
// JUnit 断言
assertEquals(expected, actual);
assertTrue(condition);
assertNotNull(object);
assertThrows(Exception.class, () -> method());
// AssertJ 断言(推荐)
assertThat(actual).isEqualTo(expected);
assertThat(condition).isTrue();
assertThat(object).isNotNull();
assertThatThrownBy(() -> method())
.isInstanceOf(Exception.class);
assertThat(list)
.isNotEmpty()
.hasSize(3)
.contains("Alice", "Bob")
.doesNotContain("Charlie");
assertThat(list)
.extracting(User::getName)
.containsExactly("Alice", "Bob", "Charlie");
assertThat(user)
.isNotNull()
.extracting(User::getName, User::getAge)
.containsExactly("Alice", 25);
assertThat(user)
.hasFieldOrPropertyWithValue("name", "Alice")
.hasFieldOrPropertyWithValue("age", 25);
指定为某个类生成测试。
示例:
test/unit --class=UserService
test/unit --class=OrderController
test/unit --class=ProductMapper
指定只为某个方法生成测试(需要配合 --class 使用)。
示例:
test/unit --class=UserService --method=createUser
test/unit --class=UserService --method=updateUser,deleteUser
指定为某个层级的所有类生成测试。
可用层级:
service - Service 层controller - Controller 层mapper - Mapper/DAO 层util - 工具类示例:
test/unit --layer=service
test/unit --layer=controller
test/unit --layer=mapper
指定为某个模块的所有类生成测试。
示例:
test/unit --module=user
test/unit --module=order
test/unit --module=product
指定只生成某些场景的测试用例,多个场景用逗号分隔。
可用场景:
normal - 正常场景exception - 异常场景boundary - 边界条件null - 空值处理示例:
test/unit --scenario=normal
test/unit --scenario=exception
test/unit --scenario=normal,exception
test/unit --scenario=normal,exception,boundary,null
可以组合多个参数使用:
# 为指定模块的指定层生成测试
test/unit --module=user --layer=service
# 为指定类生成指定场景的测试
test/unit --class=UserService --scenario=exception
# 为指定模块的指定层生成指定场景的测试
test/unit --module=order --layer=service --scenario=normal,exception
# 为指定类的指定方法生成测试
test/unit --class=UserService --method=createUser,updateUser
// 推荐:方法名_场景_预期结果
testCreateUser_EmailExists_ThrowsException()
testGetUser_UserNotFound_ReturnsNull()
testUpdateUser_ValidData_Success()
// 或使用 @DisplayName
@DisplayName("创建用户 - 邮箱已存在 - 抛出异常")
// 每个测试独立准备数据
@BeforeEach
void setUp() {
// 准备测试数据
}
@AfterEach
void tearDown() {
// 清理测试数据
}
--module 或 --layer 参数分段生成--scenario 参数只生成特定场景的测试