软件测试与行为验证
从行为主张选择输入、边界和证据,解释测试层次、替代依赖、数据、确定性与失败诊断。
先说明要检验哪种行为
测试对特定输入和条件执行程序,比较实际结果与声明的规则。判断“提交非法金额应被拒绝”,需要非法输入、实际入口、期望拒绝及未产生写入的观察。只检查函数返回值,可能遗漏外部副作用。
预期结果来自需求、规范、不变量或可信参考。把实现中的计算直接复制到测试里,二者可以一起犯错。输入、预期和判断依据应能分别说明。
边界决定证据范围
单元测试集中检查较小对象的规则;集成测试检查多个真实对象在边界上的组合;端到端测试从真实用户或系统入口追踪结果。分类名无法代替实际范围:一个叫集成的测试仍可能替换数据库,一个端到端测试也可能替换外部支付。
测试层次按失效风险选择。金额规则适合多输入精确检查;数据库接入需要真实模式和事务行为;浏览器焦点需要宿主交互;外部支付需要分辨协议替身与机构实际结果。数量多的局部测试不能抵消关键边界缺失。
替代依赖保留了什么
替身让输入和失败可控,缩短运行并隔离不相关资源。桩提供预设结果,伪实现模拟有限行为,mock 可以记录或要求交互。使用前要说明替代的是哪个角色、哪些关系保留、哪些事实不再检查。
按业务行为断言“订单被保存、事件可取得”,通常允许内部重构;按内部方法调用次数和顺序断言,则把测试绑定到实现。某些调用次序本身就是协议或资源约束,此时它属于可观察契约。接缝应对应有意义的角色,避免仅为容易替换而拆出无业务用途的接口。
替身与真实依赖会漂移。契约测试、少量真实集成和对公开接口的核查可减少这种风险,仍需明确所覆盖的版本。归档代码组织研究中的测试流派讨论是设计主张和经验研究的混合,本页没有把某种 mock 比例或 TDD 顺序当成统一质量阈值。
数据和环境怎样使结果可信
输入应包含正常、边界、拒绝和失败条件。随机数据可以扩大探索,但失败必须保存种子或具体输入。固定示例帮助回归,属性测试检查一组输入上应保持的不变量,例如排序保留元素并形成顺序。
时钟、随机、网络、环境变量和共享状态都会影响重复运行。需要确定性时提供受控入口;检查真实时间或网络时保留实际环境和波动。测试之间应隔离数据和资源,清理失败也要可见。
数据库和服务容器提供真实依赖条件,启动成功后仍需等待就绪并确认连接目标。历史测试记录应带运行时、库版本、输入、实际命令和断言,不应随正文迁移变成本轮的新执行记录。
并发和失败要进入场景
正常直线流程没有覆盖超时后重试、重复消息、断连、乱序和部分完成。并发测试应控制关键交错或记录实际顺序,检查不变量及恢复结果。等待固定毫秒数可能偶然通过,等待可辨条件更能说明完成。
取消测试至少分调用方停止等待、执行方观察取消和效果是否产生。界面测试也应区分请求结束、组件更新和可见反馈,避免只等待一个无关 DOM 元素。
失败怎样指向原因
诊断保存期望、实际、输入、环境和关键状态。先判断断言是否代表真实规则,再定位入口、依赖和时间条件。重跑能检查偶发性,不能解释根因;放宽断言或删去失败用例需要规则依据。
覆盖率说明执行经过的代码范围,不能证明断言检查了正确性质。构建和格式检查确认技术接口;静态源码核对确认当前路径;运行观察确认实际场景;真实读者效果另需相应证据。交付时分别报告。
本页吸收 TS 质量、测试、MSW、真实依赖、测试数据和软件设计材料。具体工具配置在实践中展开;本文未把归档的检查通过标志作为全站新正文的测试结果。
最后更新于