编写测试

测试模块由辅助函数和测试函数组成。测试模块可以如下所示:

#[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() {
        // 填写代码
    }
}