回复
【仓颉】坚果派仓颉三方库leap_year的实践 原创
大黑布林李子
发布于 2024-7-5 11:36
浏览
0收藏
前言
作者:大李子
团队:坚果派
十年iOS,All in转鸿蒙
前言
“仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。融入鸿蒙生态,为开发者提供良好的编程体验。”
——摘自仓颉首页
<br>
本文以一个非常简单的例子,介绍一下坚果派三方库leap_year的实现,包括测试框架的简单使用。
前置条件
关于如何创建静态库,之前的这篇文章有详细介绍,一些相关细节本文将不再提及。
创建静态库工程
- 在VSCode中创建新的静态工程leap_year
- 默认的demo.cj不够正式,我改成了main.cj
- main.cj中实现两个函数
public func isLeapYear(date: DateTime): Bool
和public func isLeapYear(year: Int): Bool
。 - 这个库的功能就这么简单的完成了
<br>
文件目录结构
-
仓颉的包管理类似java。必须按照文件夹目录结构来决定包名。这里我们按照通常的做法,目录结构写成com/团队或公司名/库名
-
然后在main.cj里声明包名为
package com.nutpi.leap_year
单元测试
对库的功能进行单元测试,保证基本功能正确,在之后迭代中做回归测试保证现有功能不被破坏。
- 在com/nutpi/leap_year下创建一个test文件夹
- 在test文件夹里创建
main_test.cj
文件用于编写测试用例。根据SDK自带的文档,找到这一页Cangjie-0.51.4-windows-docs/docs/docs/libs/std/unittest_lib.html#编译选项---test-介绍
其中强调了,测试文件必须以_test.cj
结尾。实际尝试之后,确定必须遵守这个规则,否则运行测试的按钮不会出现。 - 上图中的
.macrocall
文件是@XXX
的宏(@Test、@TestCase等)展开以后,编译器自动生成的文件。 - 如图,在main_test.cj里声明包名以及引用。包名的写法,参考上文说明,这里文件夹多了一层
test
,所以写成package com.nutpi.leap_year.test
。接下去是测试宏的引用,文档里说的并不清晰,经过我的多次尝试,需要导入unittest.*
和unittest.testmacro.*
,分别对应@Test
和@TestCase
。最后是引入main.cj里的函数,对应好包名import com.nutpi.leap_year.isLeapYear
- 测试类和方法如图编写。类要用
@Test
装饰,方法要用@TestCase
装饰。如果一切顺利,测试类和各个方法上方都会出现run|debug
的字样,点击run
或者debug
来运行或者调试测试用例。跑测试用例之前,切记要ctrl+s
保存一下当前文件改动,直接点击有可能修改无法生效。
- 测试用例可以用
@Expect
来比较相等。 - 可以用
@BeforeAll
和@AfterAll
来做准备和收尾工作,修饰的方法名可以为任意的。可以看到打印的log,如我们期待的行为。
- 上图中也可看到,测试用例通过和失败的情况。
打包并在其他工程中引用
-
打开
main.cj
文件,点击右上角三角按钮,运行打包。
-
打开另一个工程,在文件目录结构下方找到
CANGJIE LIBRARY
工具栏,点击dependencies
右侧加号。在弹出的文件夹选择窗中选leap_year项目的根目录。选择完成之后IDE会提示你是否重启LSP服务,一定记得选“是”重启一下,不然编辑器里面会找不到依赖库的引用。
-
如图导入包,并在代码中调用
isLeapYear()
方法
-
运行工程,查看log,执行成功
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2024-7-5 11:36:16修改
赞
2
收藏
回复
相关推荐