本篇將會測試新建立的 package 是否正常
測試對程式碼非常重要,尤其區塊鏈。好的測試可以省掉許多精神和金錢。
測試函數可以寫在任何地方,但通常會儲存在 tests/{$MODULE_NAME}_tests.move
位置和命名。
tests 位於根目錄底下,我們創建一個資料夾。
接著創建一個文件名為 user_info_tests.move,內容如下
#[test_only]
module sender::user_info_tests {
use std::string::utf8;
use std::signer;
use sender::user_info;
// test 屬性的這個命名參數允許為測試函數提供參數,也就是簽名者
// 注意,應該與函數的參數命名相同
#[test(user_account = @0x42)]
public entry fun test_getter_setter(user_account: signer) {
let username = b"MyUser";
user_info::set_username(&user_account, username);
let user_addr = signer::address_of(&user_account);
// 斷言,需要一個表達式和自訂的失敗錯誤代碼
assert!(user_info::get_username(user_addr) == utf8(username), 1);
}
}
在 root 層級執行此指令
$ ~/bin/aptos move test
不管成功或失敗,應該都會看到結果,如果一切順利會看到這畫面
INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING UserInfo
Running Move unit tests
[ PASS ] 0x42::user_info_tests::test_getter_setter
Test result: OK. Total tests: 1; passed: 1; failed: 0
{
"Result": "Success"
}
如果失敗也沒關係,Move 會詳細跟你說哪邊出了問題
INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING UserInfo
error[E02001]: duplicate declaration, item, or annotation
┌─ /Users/spock/Developer/move/userinfo/sources/Sender.move:6:22
│
5 │ use std::string::{String, utf8};
│ ------ Alias previously defined here
6 │ use std::string::String;
│ ^^^^^^ Duplicate module member or alias 'String'. Top level names in a namespace must be unique
讓我們 Move to Day 30