UT用例开发指导【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime返回 Runtime DT用例开发总纲UT 的测试范围通常是一个文件、一个类或者一个边界清晰的函数集合。UT 的重点是隔离被测对象验证其对外可观察行为而不是顺带验证整条链路上的所有模块。UT 用例设计 checklist为某个接口设计测试点时建议优先检查以下内容外部输入校验空指针非法枚举值越界长度、容量、索引不满足前置条件的句柄或状态边界值空容器、零长度、最小/最大合法值单元素与多元素场景资源生命周期申请和释放是否配对失败路径是否有泄漏重复创建、重复释放是否安全全局状态与单例rtSetSocVersion、SetChipType、rtSetDevice等全局状态切换环境变量、配置开关、静态缓存是否需要恢复平台/芯片分支同一接口在不同 SoC、不同 driver 能力下是否有分支行为回调与副作用回调是否注册/触发文件、目录、日志、统计信息是否正确产生如果某个检查项与当前接口无关可以不为其强行设计用例。如何校验做完整校验UT 用例应根据设计对调用结果做完整校验。常见校验点包括返回值或错误码是否准确出参是否被正确填写被测对象状态是否按预期变化mock 是否以正确参数被调用以及调用次数是否符合预期失败路径上的清理逻辑是否执行一个常见问题是“只校验返回码不校验副作用”。这类用例很难防住行为回归应避免。避免重复校验同一类校验尽量只在一个最贴近场景的用例里完成。重复校验过多会让后续改动引发大量无效失败降低用例可维护性。Runtime 仓常见注意事项1. mock 与全局状态必须在 TearDown 中收口Runtime 仓大量用例依赖 gmock 或 mockcpp。无论使用哪一种框架都需要在测试结束时完成校验和清理避免污染后续用例。常见模式如下class QueueTest : public testing::Test { protected: void SetUp() override { MockFunctionTest::aclStubInstance().ResetToDefaultMock(); } void TearDown() override { Mock::VerifyAndClear((void *)(MockFunctionTest::aclStubInstance())); } };或者class PackageProcessConfigTest : public testing::Test { protected: void TearDown() override { GlobalMockObject::verify(); } };如果测试过程中修改了芯片类型、device、环境变量、静态标志位或单例内部状态也必须在TearDown/TearDownTestCase中恢复。2. 谨慎访问私有成员仓内现有代码中存在#define private public/#define protected public的做法但这只能作为受限场景下的补充手段不应成为默认方案。建议优先顺序如下优先校验公开接口暴露出来的行为若必须观察内部状态优先复用现有 helper、stub 或 accessor只有在确实没有更好办法时才临时使用#define private public3. 文件系统场景要保证隔离和清理很多 Runtime 测试会读写/tmp、相对路径目录或临时文件。新增此类用例时路径命名应带上模块或用例特征避免与其他用例冲突测试完成后要清理临时文件和目录不要依赖其他用例预先创建目录或文件4. 兼容性变更要补对应测试如果修改了 ACL 对外结构体、枚举、常量、接口签名或 ABI 相关内容应同步检查是否需要补充或更新兼容性测试例如tests/ut/acl/testcase/compatibility/对应模块已有的 ABI/接口回归用例不推荐的 UT 设计以下几类用例需要谨慎只验证“调用成功/失败”不验证任何结果在一个用例里串多个弱相关场景为了覆盖率而硬测不真实的异常组合用例依赖前一个用例执行后的残留状态如果某个场景已经跨越模块边界需要启动模拟器、设备环境或完整流程通常更适合放到 ST而不是继续堆在 UT 中。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考