单元测试

Sui 提供了一个测试框架,以便在 Move 的开发过程中进行单元测试。Move 单元测试本质上是一个带有 #[test] 注释的无参数公共函数。

由于 sui move new 创建了 tests 文件夹和一个示例测试文件,我们将其重命名为 castle_tests.move 并取消文件内的注释内容:

cd tests
mv move_castle_tests.move castle_tests.move
#[test_only]
module move_castle::castle_tests {
    // 取消此行的注释以导入模块
    // use move_castle::move_castle;

    const ENotImplemented: u64 = 0;

    #[test]
    fun test_move_castle() {
        // pass
    }

    #[test, expected_failure(abort_code = ::move_castle::castle_tests::ENotImplemented)]
    fun test_move_castle_fail() {
        abort ENotImplemented
    }
}

不要忘记将模块名称重命名为 module move_castle::castle_tests

#[test_only] 注释表示 castle_tests 模块仅存在于测试范围内,不会在包构建和发布时包含。此注释也可以应用于函数。

返回包的根目录,并执行以下命令以运行测试:

sui move test

test

执行后,您将看到测试输出,如果一切正常,结果应为 OK

作为附加步骤,尝试将 assert! 语句中的条件修改为 false,并观察输出。这将帮助您了解测试框架如何处理失败情况。