test-driven-development

Polar Sponsor
爱发电 赞助
.NET 9.0

统一TDD技能,支持规范、任务或描述三种输入模式。通过仓库模式强制执行测试先行开发,并附带专业测试生成功能。

测试驱动开发

功能概述

测试驱动开发是一项面向实际任务的技能,主要用于Overview.;One 技能用于所有TDD工作流程;

核心要点

  • 使用现有的存储器模式强制进行测试首开发;
  • . 三种输入模式处理不同的切入点—— 切片, tas。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

使用与执行

使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

结果检查与注意事项

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

测试驱动开发(TDD)

概述

适用于所有 TDD 工作流的一项核心技能。强制采用“先写测试”的开发方式,并复用当前代码仓库中已有的模式。支持三种输入模式,分别对应不同入口:规格说明文件(specs)、任务文件(task files)或即兴描述(ad-hoc descriptions),但其核心循环始终为:RED → GREEN → REFACTOR。

输入模式

自动识别输入类型,并进入对应模式:

模式 A:源自规格说明文件(.spec.md)

当输入引用了一个包含 Given/When/Then 验收条件的 .spec.md 文件时使用此模式。

  1. 定位并解析该规格文件 —— 提取全部 Given/When/Then 三元组
  2. 为每条验收条件生成一个测试存根,主体为 todo!():
    /// Spec:  — Criterion #
    /// Given 
    /// When 
    /// Then 
    #[test]
    fn _criterion__() {
        todo!("Implement: ");
    }
    
  3. 验证存根可编译但运行失败:cargo test --no-run -p
  4. 进入 TDD 循环,使各存根通过测试

程序化支持: ralph_core::preflight::{extract_acceptance_criteria, extract_criteria_from_file, extract_all_criteria} 可用于从规格文件中解析验收条件。

模式 B:源自任务文件(.code-task.md)

当输入引用了 .code-task.md 文件或某项具体实现任务时使用此模式。

  1. 阅读任务描述,明确其中的验收条件或需求
  2. 发现已有模式(参见“模式发现”章节)
  3. 设计测试场景,覆盖正常流程、边界情况及错误条件
  4. 在任何实现代码编写前,先编写所有失败的测试
  5. 进入 TDD 循环

模式 C:源自描述性文本

适用于无规格说明文件或任务文件的即兴任务。

  1. 从描述中厘清需求
  2. 发现已有模式(参见“模式发现”章节)
  3. 编写失败的测试,聚焦于所描述的行为
  4. 进入 TDD 循环

模式发现

编写测试前,应先探查代码库中已有的约定:

rg --files -g "crates/*/tests/*.rs"
rg -n "#[cfg(test)]" crates/

通读目标代码附近 2–3 个相关测试文件,并在新测试中复现以下惯例:

  • 测试模块的组织结构、命名方式与断言风格
  • 测试夹具(fixture)辅助函数与工具函数
  • tempfile、预设场景(scenarios)或测试框架(harnesses)的使用方式

TDD 循环

1) RED —— 测试失败

  • 编写精确覆盖所需行为的测试
  • 运行测试,确认其因预期原因而失败
  • 若未实现功能时测试即通过,则该测试不正确

2) GREEN —— 最小实现

  • 仅编写足以让测试通过的最少代码
  • 此阶段不得添加额外功能,也不得进行重构

3) REFACTOR —— 重构优化

  • 在确保测试持续通过的前提下,改进实现逻辑与测试代码
  • 使其与周边代码库的规范保持一致
  • 每次修改后均需重新运行测试

Proptest 使用指南

仅当同时满足以下全部条件时,方可使用 proptest:

  • 函数为纯函数(无 I/O、无时间依赖、无全局状态)
  • 对给定输入,输出确定且可重现
  • 输入空间复杂或存在大量边界情况
proptest! {
    #[test]
    fn round_trip(input in "[a-z0-9]{0,32}") {
        let encoded = encode(input.as_str());
        let decoded = decode(&encoded).expect("should decode");
        prop_assert_eq!(decoded, input);
    }
}

除非具备充分理由,否则不得将 proptest 作为新依赖引入项目。

背压集成(Backpressure Integration)

在完成事件中包含覆盖率证据:

ralph emit "build.done" "tests: pass, lint: pass, typecheck: pass, audit: pass, coverage: pass (82%)"

在可行时,运行 cargo tarpaulin --out Html --output-dir coverage --skip-clean。若无法运行覆盖率分析,请说明原因,并提供针对性的测试证据作为替代。

测试位置规则

  • 单个规格说明映射到单一模块 → 在模块内使用 #[cfg(test)] 内联测试
  • 单个规格说明横跨多个模块 → 在 crates//tests/ 下编写集成测试
  • CLI 行为测试 → 放入 crates/ralph-cli/tests/
  • 始终遵循目标 crate 中已有的测试组织模式

反模式(Anti-Patterns)

  • 先写实现代码,再补测试
  • 生成无需实现即可通过的测试
  • 直接复制其他 crate 的测试,未适配本地模式
  • 对于简单场景,本可用示例测试(example test)解决,却强行引入 proptest
  • 在缺少覆盖率证据的情况下发出完成事件

相关专题

更多
Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

0

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习