ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

hibase32-cj单元测试实战:仓颉@Test、@Expect与@AssertThrows测试宏完整教程

hibase32-cj单元测试实战:仓颉@Test、@Expect与@AssertThrows测试宏完整教程 hibase32-cj单元测试实战仓颉Test、Expect与AssertThrows测试宏完整教程【免费下载链接】hibase32-cjBase32(RFC 4648)编码/解码库项目地址: https://gitcode.com/Cangjie-TPC/hibase32-cjhibase32-cj 是一个用仓颉Cangjie语言实现的 Base32RFC 4648编码/解码库支持 UTF-8 中文等多字节字符。本文以该项目自带的测试文件为样本带你一次学会仓颉单元测试的三大核心测试宏Test、Expect 与 AssertThrows并掌握批量断言与异常断言的完整写法。一、项目结构速览与测试运行方法hibase32-cj 的项目结构非常简洁与单元测试相关的文件只有 3 个文件说明src/base32.cj核心代码encode、decodeAsString、decodeAsBytes 等 Base32 编解码函数src/test/base32_test.cj单元测试文件本文全部示例都来自这里cjpm.toml仓颉包管理器cjpm的工程配置拿到代码后一条命令即可运行全部测试git clone https://gitcode.com/Cangjie-TPC/hibase32-cj cd hibase32-cj cjpm testcjpm test会自动扫描src/test/目录下所有带Test标注的函数并逐个执行全部通过即说明库的功能符合预期。✅二、仓颉单元测试三大测试宏速览三个宏都来自标准库std.unittest.testmacro.*对应 base32_test.cj 开头的导入测试宏用途最小示例Test把一个函数标记为测试用例Test func testAscii() { ... }Expect断言「实际值 期望值」Expect(encode(Hello), JBSWY3DP)AssertThrows断言某表达式抛出指定类型异常AssertThrowsException)一句话记忆Test 负责「跑」Expect 负责「对答案」AssertThrows 负责「验错」。三、Test Expect第一个完整的仓颉测试用例看 testAscii 的实现Test func testAscii() { for (i in 0..strs.size) { Expect(encode(strs[i]), base32Strs[i]) } }两个要点参数顺序Expect(实际值, 期望值)顺序反了虽然也能编译但失败时会很难读批量断言技巧待测数据预先放进strs和base32Strs两个数组测试数据定义覆盖空串、单字符、长文本等 8 组场景循环里逐组断言比逐条手写用例省心得多。同样的写法还出现在 testDecode解码方向和 testUint8Arryay字节数组输入中可见「数据表 循环 Expect」是仓颉单元测试最常用的套路。四、UTF-8 中文场景Rune 处理与编码断言hibase32-cj 特意支持 UTF-8 中文编码对应 testUtf8 与 testUtf8Decode中文应编码为4S4K3ZUWQ4解码后再变回原文。这背后依赖仓颉的 Rune 字符类型表示 Unicode 标量值中的单个字符因此测试数据里不仅放了中文还放了带重音的aécio和补充平面字符用 Expect 断言编码结果确保多字节字符不被截断或错码。五、异常场景测试AssertThrows 让「该报错的必须报错」对非法输入正确行为不是「能跑通」而是「必须抛错」——这正是AssertThrows异常类型的用武之地。项目中有两处实战// 解码出非 UTF-8 字节 → 必须抛异常 AssertThrowsException) // 含非法字符如 1 → 必须抛异常 AssertThrowsException)分别见 testUtf8Exception 与 testInvaildString。真实运行中抛出的异常堆栈如下注意堆栈最上层正是测试文件中的断言行——异常确实被抛出、且被AssertThrows成功捕获所以该用例计为通过。这就是「负向测试」断言错误行为本身就是质量保障。六、边界值清单辅助函数同样要测库内部自实现的小工具函数如模拟 JS的 unsignedRightShift、合法性检查 testVaildBase32也要单独覆盖testUnsignedRightShift18 组 Expect覆盖正数、0、负数、移位位数为 0、移位位数大于 32 等边界testVaildBase32小写字母、!、*等非法字符必须判 false空串必须判 true。七、总结仓颉单元测试编写清单 测试文件放在src/test/目录函数前加Test即成为一个可运行的测试用例值断言用Expect(实际值, 期望值)配合「数据表 循环」做批量断言异常断言用AssertThrowsException为非法输入兜底cjpm test一键运行全绿再提交。对照 src/test/base32_test.cj 通读一遍你就能在自己的仓颉项目里复刻这套完整的 Base32 编码测试模式了。【免费下载链接】hibase32-cjBase32(RFC 4648)编码/解码库项目地址: https://gitcode.com/Cangjie-TPC/hibase32-cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表