SuperAPI AI 工具集

The Standard Testing

测试与质量

查看项目

更新于 10-15 22:12

技能介绍

用途:该技能用于规范 The Standard 项目的测试、验证与证明方式,覆盖测试驱动开发(TDD)、验证策略、异常映射、单元测试结构、控制器测试与 UI 组件测试。凡是编写、审查、扩展、修复或排序测试,以及决定先测什么、如何在测试中映射异常、如何证明流程符合 Standard 时,都应使用本技能。

主要能力:明确覆盖基础服务(Foundation service)的实现与验证/测试模式;结构、逻辑、外部与依赖验证测试;异常映射与分类测试;处理服务(Processing service)测试职责;编排服务(Orchestration service)调用顺序测试;聚合服务(Aggregation service)测试限制;REST 控制器单元与验收测试;UI 基础组件、核心组件与页面的测试;单元测试、部分测试组织、约定、AAA 与测试顺序;与测试创建和实现验证相关的 TDD FAIL/PASS 纪律。

必要用法:遵循 TDD——先写失败测试,验证测试确实失败,写最小实现使其通过,验证相关套件全部通过,在不改变行为的前提下重构,然后重复。验证规则必须从权威来源推断:基础服务业务规则、存储层配置(StorageBroker.[Entity].Configurations.cs)以及使用所隐含的领域期望。存储配置表示最低强制约束(必填/可选、最大长度、最小长度、精度/小数位/格式);基础服务是强制执行边界,所有可能导致持久化失败的约束必须在到达存储前验证。基础验证必须等于或严于存储约束:允许强化(可选→必填、可选→限长、更小最大长度),不允许弱化或缺失(必填→未校验必填、最大长度→无长度校验),违反对齐视为设计缺陷、测试失败条件和评审阻断项。数据库不得被依赖来强制执行必填、长度、格式验证;唯一可不经前置验证的数据库约束是外键、唯一/重复键与并发约束。验证顺序:先结构验证,再逻辑验证,再外部验证,最后依赖验证。空值等硬停止守卫必须立即中断;多个字段可独立无效时,先收集再抛出(可使用可 upsert 的异常数据、带条件与消息的动态规则和验证收集器,收集器含错误后一次性抛出);混合连续验证先验证父对象再验证子属性,分级拆分嵌套验证以避免空引用失败。

适用场景与限制:验证测试只针对基础服务验证方法,不直接测试存储配置行为,每个存储定义的约束都必须有对应基础验证测试,覆盖违反约束与边界越界(最大值以上失败、最小值以下失败),有效范围场景由逻辑测试覆盖、不得在验证测试中重复。基础服务测试顺序:快乐路径、结构验证、逻辑验证、外部验证、依赖验证、依赖异常、服务异常,并始终验证日志与 broker 调用、无多余调用。处理服务测高阶逻辑、移位器与组合,不测原始 broker 细节。编排服务测多实体流程组合、契约映射/分支、调用顺序、异常包装与解包。聚合服务不测依赖调用顺序,不用 mock 序列式顺序断言,只测基本结构验证与暴露层聚合行为。控制器必须有映射逻辑单元测试(成功码、验证/依赖/服务错误、安全失败映射),每个端点都要有验收测试,并在验收测试后清理数据、模拟不属于本微服务的外部资源;单元与验收之外集成与端到端测试同样有效。UI 基础组件视为薄包装,测试其暴露 API 与包装行为,不放入业务逻辑;核心组件要测试驱动,测元素的存在(属性赋值、按 id 搜索或通用搜索)、属性、动作与样式,动作覆盖改变状态、创建组件或触发服务调用;核心组件应只与一个视图服务集成;页面/容器是较简单的路由容器,一般不需要单元测试,且不应包含业务逻辑。

单元测试约定:在测试中镜像部分类拆分,根测试文件放 setup/辅助方法,按 logic、validations、exceptions 拆分文件;使用 GWT(Given/When/Then);模拟所有依赖;使用可读断言;用深克隆保护期望对象身份;默认使用随机数据;精确验证依赖调用并以 VerifyNoOtherCalls 结束;命名明确且由场景驱动。基础服务新增例程的测试实现顺序为:ShouldAdd{Entity}Async、Add 时实体为空抛验证异常并记录日志、Add 时实体无效抛验证异常并记录日志,随后依次为 BadRequest→冲突、Unauthorized→Forbidden→NotFound→UrlNotFound、InternalServerError→ServiceUnavailable,以及 HttpRequestException 与兜底 ServiceException;基于存储的服务则以重复键、DbUpdate、SQL 异常等价替换。每笔 FAIL 提交必须让测试真实运行并失败,每笔 PASS 提交必须让所有测试运行并通过,未验证失败前不得提交 FAIL。

关键库:Xeption、EFxceptions、RESTFulSense、Moq、FluentAssertions、DeepCloner、Tynamix.ObjectFiller、xUnit。异常处理原则要求:外部(非本地)异常必须在基础层边界本地化,原生 SQL/HTTP/SDK 异常不得跨越服务边界;本地化必须保留外部异常的全部相关数据(数据字典、约束/验证元数据、标识/键),使内部异常在分类后仍含完整验证细节;所有异常必须归入 Validation、DependencyValidation、Dependency、Service 之一;各层必须捕获下游异常、解包分类异常、保留本地异常并重新包装为本层分类异常,原始本地异常必须始终保留为内部异常;处理层只处理分类异常、不得依赖基础层异常类型;编排层须统一为每类单一分类异常并解包保留内部异常;每个服务必须有 catch (Exception) 映射为 ServiceException 的兜底;每层在重新抛出前记录日志且只记录分类异常;编排异常测试应使用 [Theory]、单测覆盖多种依赖异常类型并避免重复。资料中未提供具体收费、价格或平台信息。