name: 测试脚手架技能
description: “通过源代码分析,使用语言适当的模板生成测试文件框架。”
测试脚手架技能
为源文件生成测试文件框架,支持TDD工作流程。框架包含TODO桩,测试工程师在执行过程中填充。
变量
| 变量 |
默认 |
描述 |
| SOURCE_FILES |
[] |
要为哪些源文件生成测试框架 |
| TEST_FRAMEWORK |
auto |
要使用的框架(从清单中自动检测) |
| OUTPUT_DIR |
tests/ |
生成的测试文件放置位置 |
| NAMING_CONVENTION |
language-default |
测试文件命名模式 |
| INCLUDE_FIXTURES |
true |
生成固定桩 |
| STUB_STYLE |
todo |
todo(TODO注释)或skip(跳过标记) |
工作流程(必须)
- 检测堆栈:读取包清单(
pyproject.toml,package.json,go.mod,Cargo.toml)
- 识别框架:匹配测试依赖(pytest,vitest,jest,testing,cargo test)
- 分析源代码:从每个源文件中提取公共函数、类、方法
- 映射到测试:应用命名约定以确定测试文件路径
- 生成框架:使用语言模板,为每个可测试单元插入TODO桩
- 返回清单:包含生成文件、跳过文件和单元计数的JSON
支持的框架
| 语言 |
框架 |
检测 |
| Python |
pytest, unittest |
pyproject.toml → [tool.pytest]或deps中的pytest |
| TypeScript |
vitest, jest |
package.json → devDeps中的vitest或jest |
| JavaScript |
vitest, jest |
package.json → devDeps中的vitest或jest |
| Go |
testing |
go.mod → 内置测试包 |
| Rust |
cargo test |
Cargo.toml → 内置测试框架 |
| Dart |
flutter_test, test |
pubspec.yaml → dev_deps中的flutter_test或test |
命名约定
| 语言 |
源 |
测试文件 |
| Python |
src/auth/login.py |
tests/auth/test_login.py |
| TypeScript |
src/auth/login.ts |
src/auth/login.test.ts或tests/auth/login.test.ts |
| Go |
pkg/auth/login.go |
pkg/auth/login_test.go |
| Rust |
src/auth/login.rs |
内联#[cfg(test)]模块 |
| Dart |
lib/auth/login.dart |
test/auth/login_test.dart |
源代码分析启发式
Python
- 检测
def function_name(,其中名称不以_开头
- 检测
class ClassName:用于公共类
- 在类中提取方法签名
- 跳过
__init__,__str__等(双下划线方法)
TypeScript/JavaScript
- 检测
export function,export const,export class
- 检测
export default function/class
- 解析JSDoc/TSDoc以获取参数类型
Go
- 检测导出函数(大写名称)
- 检测结构上的导出方法
- 检测导出类型
Rust
- 检测
pub fn,pub struct,pub enum
- 检测带有公共方法的
impl块
输出模式
{
"format": "scaffold-manifest/v1",
"generated_at": "<ISO-8601 UTC>",
"framework": "pytest",
"generated": [
{
"source": "src/auth/login.py",
"test": "tests/auth/test_login.py",
"units": ["login", "logout", "refresh_token"],
"unit_count": 3
}
],
"skipped": [
{
"source": "src/auth/utils.py",
"reason": "test file exists"
}
],
"total_units": 12
}
红旗(停止并验证)
- 未找到包清单→提示用户输入框架
- 源文件中没有公共函数→跳过并警告
- 测试文件已存在→除非指定
--force,否则跳过
- 无法解析源文件→记录警告,继续其他文件
集成点
与/ai-dev-kit:plan-phase集成
- 被调用以自动填充
Tests Owned Files列
- 使用impl任务中的
Owned Artifacts作为源文件
与/ai-dev-kit:execute-lane集成
- 在测试工程师运行之前被调用
- 提交的框架以
chore(P{n}-{lane}): scaffold test files
与test-engineer代理集成
- 代理在框架中检测TODO标记
- 填充测试实现
- 完成后移除TODO标记
提供者说明
- 当
/ai-dev-kit:scaffold-tests被调用时使用此技能
- 优先选择TODO风格的桩而不是跳过标记以提高可见性
- 在测试组织中保留源文件结构
- 根据检测到的框架包含适当的导入