编写测试
测试模块由辅助函数和测试函数组成。测试模块可以如下所示:
#[test_only]
module my_package::my_module_tests {
use std::string::{String, utf8};
use std::vector;
use my_package::my_module;
#[test]
fun my_test1() {
setup();
let my_struct = my_module::new_struct();
assert!(my_module.do_something(my_struct) == 0, 0);
}
#[test]
fun my_test2() {
setup();
let my_struct = MyStruct::new();
assert!(my_module.do_something(my_struct) == 0, 0);
}
fun setup() {
// 填写代码
}
}
在上面的例子中,我们有一个辅助设置函数,该函数在每个测试开始时被调用。请注意,
Move 没有自动设置函数,因此测试需要手动执行此操作。每个测试都带有 #[test]
注释,因此在开发者执行测试运行时会运行这些测试。
sui move test
在测试目录中。开发者还可以运行 sui move test --coverage
以获取覆盖率报告 - 测试覆盖了多少百分比的代码。
测试可以使用 assert! 语句来检查代码在测试中的预期行为。assert! 接受两个参数:
• 第一个是布尔表达式,如果测试通过,应该计算为 true
• 第二个是错误消息,以帮助指示哪个断言失败,以防测试中有很多断言
在同一模块中可以有任意数量的测试。测试模块还可以导入任何其他模块。请注意,在测试模块中编写的所有内容都不会部署到区块链, 因此开发者无需担心这里的安全问题。辅助函数也可以在没有实际测试的单独测试模块中创建:
#[test_only]
module my_package::test_helper {
public fun setup() {
// 填写代码
}
}