SuperAPI AI 工具集

cursor-principle-test-behavior-not-implementation

编程与开发

查看项目

更新于 10-16 05:52

技能介绍

这是一条测试编写原则,用于在编写、修改或保留测试时约束断言方式,核心是:测试应当像使用者那样调用代码,并针对可观察到的结果用字面期望值断言。相反的写法是断言代码做了哪些内部调用,或复述代码中已有的常量。

用途:判断一个测试是否具备因缺陷而失败的能力。资料给出的自检方法是:在保留某个测试前,设想它导入的所有函数都返回 undefined,若测试仍然通过,说明它没有观察到任何行为,无法因缺陷而失败,此时应改写断言或删除该测试。

资料列出的五种“导入函数全返回 undefined 仍会通过”的形态: 一、断言过弱或缺失,例如没有 expect,或仅用 toBeDefined、toBeTruthy、not.toThrow、toBeInstanceOf、toBeGreaterThan(0)。 二、只验证 mock 或缺失,例如只用 toHaveBeenCalled、not.toHaveBeenCalled、toBeUndefined、toEqual([])、toHaveLength(0)、not.toBe(wrongValue)。 三、自引用,期望值来自被测代码本身,例如 expect(f(a)).toBe(f(a))、expect(parsed.url).toBe(buildUrl(...))。 四、常量钉死,断言复述手工维护的常量、配置默认值、表格行或提示词字符串,例如 expect(LIMITS.maxTools).toBe(8)、expect(PROMPT).toContain("You are")。 五、夹具断言夹具,断言读取的是测试自己构建的数据或 beforeEach 中计算的值,被测对象从未在测试体内运行。

修正方式:在测试体内用具体输入调用被测对象,并断言字面输出或可观察效果,例如 expect(slugify("Hello, World!")).toBe("hello-world")。若验证缺失,应在同一测试中对另一输入断言其存在;若是常量,则改为用一个输入测试读取该常量的机制,而不是复述该值;若是 mock,则断言其收到的载荷或调用后的状态,而不是“被调用过”。若不存在这类断言,则删除该测试。

适用场景:单元测试与集成测试中需要筛选有效断言的场合。限制:资料未提供除上述原则外的工具集成方式、安装命令、版本或运行环境信息。