02 · Test Generation
无副作用的纯函数最适合让 AI 写测试:输入输出都可观察、无需 mock。本案例让 DSCC 读一个源文件,生成表驱动的测试文件,覆盖正常、边界、错误三类用例。
演示能力
- 对源文件
read_file。 - 对工作区内新路径
write_file。 WorkspaceWrite权限:只能写cwd之内,见 guides/permissions.md。
准备
在 Rust 项目里(cargo new --lib util_demo
新建即可)建目标函数:
cat > src/utils.rs <<'RS'
use std::time::Duration;
pub fn parse_duration(s: &str) -> Option<Duration> {
let s = s.trim();
if s.is_empty() { return None; }
let (num, unit) = s.split_at(s.len() - 1);
let n: u64 = num.parse().ok()?;
match unit {
"s" => Some(Duration::from_secs(n)),
"m" => Some(Duration::from_secs(n * 60)),
"h" => Some(Duration::from_secs(n * 3600)),
_ => None,
}
}
RS
echo 'pub mod utils;' >> src/lib.rs
运行命令
dscc --model claude-sonnet-4-6 \
--permission-mode workspace-write \
prompt "$(cat docs/cookbook/02-test-generation/PROMPT.md)"
真实运行产物见 report_dscc.md,生成的测试文件镜像在
generated_utils_test.rs。
注:无人值守运行时,请用
--permission-mode danger-full-access(或装一个PreToolUse钩子自动放行cargo *);模型会通过cargo test自查。
预期行为
模型通常会:
read_file读src/utils.rs。- 可能
glob_search查Cargo.toml或现有测试。 write_file生成tests/utils_test.rs,以#[test]函数组织表格。
不应改动 src/utils.rs。
验收
cargo test通过。tests/utils_test.rs存在,至少 5 条用例(正常 + 边界 + 错误)。git diff src/utils.rs为空。