首页/新闻资讯/正文详情

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

发布时间:2026/9/25 2:35:49 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

9层回退解析链:VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的?
9层回退解析链:VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的?

9层回退解析链:VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的? 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper … · 2026/9/25 2:35:49

路面病害数据集实战:从解压清洗到YOLOv8训练全流程
路面病害数据集实战:从解压清洗到YOLOv8训练全流程

简介:面向道路病害检测与智能巡检场景,这份资料包提供了一套经过人工标注的道路病害标注数据,覆盖城市街道、高速公路、乡村道路、住宅区等多种道路场景,可用于道路病害的识别与定位。包内共2000个文件,主体为1998个XM… · 2026/9/25 2:35:49

text-to-speech硬件接线避坑指南:4步正确连接TTS语音合成模块(UART交叉接线图解)
text-to-speech硬件接线避坑指南:4步正确连接TTS语音合成模块(UART交叉接线图解)

text-to-speech硬件接线避坑指南:4步正确连接TTS语音合成模块(UART交叉接线图解) 【免费下载链接】CupCode_text-to-speech模块 源师兄扩展项目: 文字转语音 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/text-to-speec… · 2026/9/25 2:35:43

react-native-skia 图像偏移过滤器 Offset 完全指南:属性、示例与底层实现
react-native-skia 图像偏移过滤器 Offset 完全指南:属性、示例与底层实现

图形学移动开发跨平台UI组件 【免费下载链接】react-native-skia High-performance React Native Graphics using Skia 项目地址: https://gitcode.com/gh_mirrors/re/react-native-skia 点击查看 免费下载 本文围绕 react-native-skia 提供的 Offset 图像过滤器展… · 2026/9/25 3:05:43

新春送福进一线:一场基层工会活动的策划与复盘
新春送福进一线:一场基层工会活动的策划与复盘

腊月下旬的北京,天亮得晚。活动室门口有人摸黑支桌子,红纸一卷一卷堆在墙角,砚台里的墨还没化开,凑近能闻到那股子墨香。常营地区总工会今年的"新春送福进一线"活动,就这么从一张桌子开始铺开了。说实话&… · 2026/9/25 3:05:43

easy-vibe 前端进阶教程:Figma 与 MasterGo 实战入门,从零创建网页原型
easy-vibe 前端进阶教程:Figma 与 MasterGo 实战入门,从零创建网页原型

教程文档 【免费下载链接】easy-vibe 从 0 到 1 学会 vibe coding,项目制学习 项目地址: https://gitcode.com/datawhalechina/easy-vibe 点击查看 免费下载 本文基于 easy-vibe 教程 Stage 2(初级-中级开发)前端方向的《Figma 与… · 2026/9/25 3:05:37

F´ 中的规则与场景驱动测试:基于 STest 的组件单元测试框架详解
F´ 中的规则与场景驱动测试:基于 STest 的组件单元测试框架详解

嵌入式系统编程 【免费下载链接】fprime F - A flight software and embedded systems framework 项目地址: https://gitcode.com/gh_mirrors/fpri/fprime 点击查看 免费下载 导读 STest 是 F(F Prime)飞行软件与嵌入式系统框架中内置的一个… · 2026/9/25 3:05:37

AI芯片架构选型指南:从GPU到TPU的实战对比
AI芯片架构选型指南:从GPU到TPU的实战对比

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

Win10 LTSC 2019老电脑优化指南:稳定、轻量、十年支持
Win10 LTSC 2019老电脑优化指南:稳定、轻量、十年支持

1. 为什么老电脑需要LTSC?不是“精简版”,而是“去冗余的官方原生系统”你手边那台奔腾G3258配4GB内存、机械硬盘还在吱呀作响的办公机,或者那台被塞进收银台底下、连USB3.0都没有的POS终端——它们真就该被淘汰吗?我去年帮本地一… · 2026/9/25 3:05:37

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码