新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/25 2:35:46来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

API网关统一Token接入:OpenClaw、Claude Code与n8n部署实践 2026/9/25 9:42:38

API网关统一Token接入:OpenClaw、Claude Code与n8n部署实践

先说结论:这类“网关给 OpenClaw、Claude、n8n 提供无限免费 token”的说法,本质是把多个合规 token 来源聚合到一个统一 API 入口,再由网关做路由、配额和密钥管理。它不会凭空生成 token,更不能绕过服务商的计费体系&#xff1b…

阅读更多 →
BACKDOOR2025 CTF题解:PNG隐写、RSA低指数、SQL注入与栈溢出 2026/9/25 9:42:19

BACKDOOR2025 CTF题解:PNG隐写、RSA低指数、SQL注入与栈溢出

1. 先说说我为什么只写了这几道题BACKDOOR2025 是某安全社区在年初办的线上CTF,题目难度整体不算变态,但分类很全,MISC、Crypto、Web、Reverse、PWN 都上了。比赛时长 48 小时,周日晚上结束,周一我还要上班&#xff0c…

阅读更多 →
PCB功率电感底部铺铜还是挖空?EMI与热设计的工程平衡法则 2026/9/25 9:42:06

PCB功率电感底部铺铜还是挖空?EMI与热设计的工程平衡法则

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Atlas 300V 24G部署YOLO全流程:昇腾推理卡环境搭建与优化 2026/9/25 9:41:34

Atlas 300V 24G部署YOLO全流程:昇腾推理卡环境搭建与优化

1. Atlas 300V 24G到底是一张什么卡如果你也是被"atlas部署yolo"这个词带进来的,那你大概率跟我一样,手头或公司机房里躺着一张Atlas 300V 24G,想赶紧把YOLO跑起来,结果一查资料各种术语铺过来,头都大了。先…

阅读更多 →
计算机网络简答题与论述题核心考点梳理:从TCP/IP到子网划分 2026/9/25 9:41:28

计算机网络简答题与论述题核心考点梳理:从TCP/IP到子网划分

简介:计算机网络课程的简答题与论述题常考内容,集中整理进一份Word文档,面向高校学生、考研备考生及求职面试者备考使用。文档系统梳理了电路交换、分组交换与报文交换的优缺点,分组传输中传输、传播、排队等延迟的影响因素&#…

阅读更多 →
从TMN框架到E300实战:传输网管入门核心知识梳理 2026/9/25 9:41:28

从TMN框架到E300实战:传输网管入门核心知识梳理

简介:《中兴传输网管入门知识》是一份面向通信行业新手与传输网管初学者的入门教程,系统梳理电信管理网(TMN)核心概念及其在SDH传输网络中的落地方式。内容从TMN的引入背景、三大结构(功能结构、信息结构、物理结构&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉