推荐一个超好用的测试工具,值得体验!
在软件开发领域中,测试是确保质量与可靠性的必要环节。俗话说得好“工欲善其事,必先利其器”,测试工具越简单、用户友好度越高,开发者编写测试的意愿度就越高。
为了满足大家的测试需求,MoonBit 标准库最近引入了 inspect 函数,我们也称之为 expect 测试,它可以帮助程序员快速编写测试。
相比于 OCaml 和 Rust,MoonBit 提供了更加简洁高效的测试体验。我们的测试工具不仅操作简便,而且无需任何外部依赖,支持开箱即用,简化了测试流程。
这里简单介绍一下 MoonBit:
MoonBit 是国内首个工业级编程语言及其配套工具链(https://www.moonbitlang.cn/)是由粤港澳大湾区数字经济研究院基础软件中心打造的AI原生的编程语言以及开发者平台。MoonBit 自2022年10月推出以来,通过创新框架在程序语言界形成后发优势,已在编译速度、运行速度和程序体积上取得了显著的优势。MoonBit 平台的出现不仅仅作为一种编程语言,更提供一个完整的开发工具链,包括 IDE、编译器、构建系统、包管理器等。
接下来,让我们进一步了解 inspect 函数的使用。
忽略掉与位置相关的参数后,inspect 函数签名为:
pub fn inspect(obj : Show, ~content: String = "")
这里 obj 是任意一个实现 Show 接口的对象,~content 是一个可选参数,表示我们所期望的 obj 转化为字符串后的内容。听起来有点绕?让我们先来看看 inspect 的基本用法:
01 基本用法
首先,让我们使用 moon new hello 创建一个新项目
此时项目的目录结构如下:
.
├── README.md
├ ── lib
│ ├── hello.mbt
│ ├── hello_test.mbt
│ └── moon.pkg.json
├── main
│ ├── main.mbt
│ └── moon.pkg.json
├── moon.mod.json
打开 lib/hello_test.mbt,将内容替换为:
fn matrix(c: Char, n: Int) -> String {
let mut m = ""
for i = 0; i < n; i = i + 1 {
for j = 0; j < n; j = j + 1 {
m = m + c.to_string()
}
m += "\n"
}
m
}
这里,matrix 函数接受一个字符 c 和整数 n 作为参数,生成一个 n * n 大小的字符矩阵。
接下来,添加如下内容:
test {
inspect(matrix('🤣', 3))?
}
打开终端,执行 moon test 命令可以观察到类似如下输出:
Diff:
----
🤣🤣🤣
🤣🤣🤣
🤣🤣🤣
----
这里的输出展示了 matrix 函数的实际输出和 ~content 参数的差异,执行 moon test -u 或者 moon test --update 可以观察到 lib/hello_test.mbt文件中的测试块被自动更新成:
test {
inspect(matrix('🤣', 3), ~content=
#|🤣🤣🤣
#|🤣🤣🤣
#|🤣🤣🤣
#|
)?
}
让我们再把 n 改成 4,然后执行 moon test -u 可以观察到测试块被自动更新成:
test {
inspect(matrix('🤣', 4), ~content=
#|🤣🤣🤣🤣
#|🤣🤣🤣🤣
#|🤣🤣🤣🤣
#|🤣🤣🤣🤣
#|
)?
}
