ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

开发指南:跟着md2_cj学仓颉项目工程化——cjpm构建、测试、覆盖率与文档一条龙

开发指南:跟着md2_cj学仓颉项目工程化——cjpm构建、测试、覆盖率与文档一条龙 开发指南跟着md2_cj学仓颉项目工程化——cjpm构建、测试、覆盖率与文档一条龙【免费下载链接】md2-cj仓颉版md2摘要算法项目地址: https://gitcode.com/Cangjie-TPC/md2_cjmd2_cj是一个用仓颉语言Cangjie实现的 MD2 消息摘要算法开源项目支持对字符串和文件计算 MD2 哈希值。本文以它作为样板带你完整走一遍仓颉项目的工程化流程用cjpm完成依赖管理、编译构建用cjpm test跑单元测试用cjcov生成 97.5% 覆盖率的可视化报告再用cjpm doc一键生成 API 文档——一套命令跑通构建、测试、覆盖率、文档一条龙。1. 项目结构速览一个极简的仓颉工程长什么样md2_cj 的目录非常干净麻雀虽小五脏俱全正好适合学习仓颉工程的标准组织方式文件/目录作用cjpm.toml工程配置包名、版本、编译选项、输出类型cjpm.lock依赖锁定文件由 cjpm 自动生成src/md2.cj核心源码MD2 算法实现与公开 APIsrc/md2_test.cj单元测试字符串与文件两类测试用例src/utils/extend_file.cj工具函数判断文件是否存在支持软链接docs/算法说明、API 文档与 Doxygen 样式文件a.txt、b.txt测试用的数据文件先看一眼工程身份证 cjpm.toml几个关键字段值得记住[package] name md2_cj # 包名 version 0.3.2 # 版本号 cjc-version 1.0.0 # 最低编译器版本 compile-option -O2 # 优化等级 output-type static # 产出静态库供其他项目依赖output-type static说明 md2_cj 是一个库工程自己编译出静态库让别人通过依赖方式引用。这也是仓颉库项目的标准做法。获取代码需要先安装仓颉 SDK 1.0.0 及以上版本git clone https://gitcode.com/Cangjie-TPC/md2_cj cd md2_cj2. 最快cjpm构建方法三条命令理解构建全流程2.1 更新与安装依赖cjpm 是仓颉语言的包管理工具和 Maven、npm 的角色类似。项目根目录下执行cjpm update # 解析依赖并生成 cjpm.lockmd2_cj 目前没有第三方依赖但 cjpm.lock 依旧会被生成用于锁定依赖状态。如果是作为依赖方引用它则在自己的 cjpm.toml 中加入[dependencies] md2_cj { git https://gitcode.com/Cangjie-TPC/md2_cj.git, tag 0.3.2 }再执行cjpm update即可拉取依赖。2.2 编译构建cjpm build # 调试构建 cjpm build --release # 带 -O2 优化的发布构建构建产物默认输出到output/目录编译选项由 cjpm.toml 中的compile-option -O2控制。整个构建过程零配置——只要 SDK 版本满足cjc-version的最低要求cjpm 就会自动找到src/下的全部.cj文件参与编译。2.3 源码里隐藏的构建友好细节打开 src/md2.cj你会发现几个值得学习的工程化设计公开 API 极简只暴露两个md2函数——md(String): String 计算字符串摘要md(Path): ?String 计算文件摘要用Option优雅表达文件无效时返回 None内部实现全部私有md2Update、md2Block、md2UpdateChecksum都是private外部无法触碰内部缓冲区流式实现文件按 16 字节分组读取md2File内部统一走流的思路天然为网络流等扩展留好了接口。这种公开面收窄 内部私有化的组织方式是任何语言里库工程的最佳实践。3. 单元测试入门用注解写出可维护的测试用例仓颉的测试框架基于注解不需要写繁琐的断言函数。看 src/md2_test.cj 的结构就非常清楚了Test class MD2Test { TestCase func testMd2String(): Unit { Assert(8350e5a3e24c153df2275c9f80692773, md2()) Assert(32ec01ec4a6dac72c0ab96fb34c0b5d1, md2(a)) Assert(da853b0d3f88d99b30283a69e6ded6bb, md2(abc)) } }三个注解各司其职Test标记测试类TestCase标记测试方法Assert(期望值, 实际值)声明式断言期望值写在前面可读性极强。md2_cj 的测试分两组正好覆盖了字符串 API 和文件 API 两条路径字符串用例testMd2String使用 RFC 1319 官方公布的基准向量包括空串、a、abc 等 7 组数据结果逐字节可验证——这是加密算法测试的黄金标准文件用例testMd2ValidFile 与 testMd2InvalidFile用仓库里预置的 a.txt、b.txt 验证正常文件并用 4 个软链接文件soft-link-exist-file、soft-link-no-exist-file等专门验证符号链接与不存在路径返回None的边界行为。 边界条件测试是新手最容易忽略的部分目录路径、不存在的文件、失效软链接……src/utils/extend_file.cj 中的fileExists对软链接做了递归解析测试里就有对应的用例兜底。运行测试只需一条命令cjpm test全部用例会输出通过情况任何一条Assert失败都会让构建立刻标红。4. 最快覆盖率配置方法两条命令生成可视化报告md2_cj 引以为傲的一点是97.5% 的测试覆盖率而这个数字是命令跑出来的不是写在 README 里的口号。在 README.md 中作者给出了标准流程只需两步# 第一步带覆盖率采集运行测试 cjpm test --coverage # 第二步生成 HTML 详细报告 cjcov --root./ --html-details -o html_output然后打开html_output/index.html就能看到逐文件、逐行的覆盖率热力图哪个分支没被测试命中一目了然。对新人来说这条流程的价值在于可复制任何仓颉项目都可以套用同样两条命令把测试覆盖率变成 CI 里的硬指标而不是开发者的自我感觉。5. 一键cjpm doc文档生成Doxygen 已经配好了写 API 文档是很多开源项目最难坚持的一环而 md2_cj 把成本降到了零源码里每个公开函数都写好了注释如 md2 的文档注释工程又预置了 Doxygen 的模板与样式文件——docs/misc/doxygenextra.css 美化外观docs/misc/header.html、docs/misc/footer.html 定制页面结构。于是文档生成只剩一条命令cjpm doc执行完毕后根目录会生成html文件夹打开html/index.html即可浏览完整的 API 文档。配套的文字版 API 说明在 docs/feature_api.md想了解 MD2 算法原理分块、填充、S 盒变换、18 轮迭代、校验码则阅读 docs/md2_algorithm.md。6. 一条龙总结你的仓颉工程化命令清单把全文浓缩成一张速查表照着敲就能完成完整闭环阶段命令产物拉代码git clone https://gitcode.com/Cangjie-TPC/md2_cj本地工程依赖cjpm updatecjpm.lock构建cjpm build --releaseoutput/静态库测试cjpm test测试通过/失败报告覆盖率cjpm test --coveragecjcov --html-detailshtml_output/报告文档cjpm dochtml/index.htmlAPI 文档小结md2_cj 用不到 400 行源码演示了一个仓颉库工程该有的全部样子——cjpm.toml 定义构建、Test/Assert注解写测试、cjcov 量化质量、Doxygen 自动生成文档。把这些一条龙命令变成肌肉记忆你的第一个仓颉开源项目就已经领先大多数新手了。【免费下载链接】md2-cj仓颉版md2摘要算法项目地址: https://gitcode.com/Cangjie-TPC/md2_cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表