Move Language Basic
Unit Test

Unit test

Unit test trong trong Move cung cấp annotations mới cho ngôn ngữ Move:

  • #[test]

  • #[test_only], and

  • #[expected_failure].

  • Chúng lần lượt đánh dấu một function as a set, đánh dấu một module hoặc thành viên của module (như use, hàm, hoặc cấu trúc) là mã chỉ được bao gồm cho mục đích kiểm thử, và đánh dấu rằng một bài kiểm thử dự kiến sẽ thất bại.

module my_addrx::Testing
{
    fun is_even(number : u64) : bool
    {
        if(number % 2==0)
        {
            true
        }
        else
        {
            false
        }
    }
 
 
    #[test]
    fun testing_is_even()
    {
        let x=is_even(14);
        assert!(x==true,1);
 
    }
}
  • Các bài kiểm thử đơn vị cho một gói Move có thể được chạy bằng lệnh: aptos move test

  • Cũng có một số tùy chọn có thể được truyền cho binary kiểm thử đơn vị để tinh chỉnh kiểm thử và giúp gỡ lỗi các bài kiểm thử thất bại.

  • Các tùy chọn này có thể được tìm thấy bằng cách sử dụng cờ trợ giúp (--help):

aptos move test -h

Example

module my_addrx::my_module {
 
    struct MyCoin has key { value: u64 }
 
    public fun make_sure_non_zero_coin(coin: MyCoin): MyCoin {
        assert!(coin.value > 0, 0);
        coin
    }
 
    public fun has_coin(addr: address): bool {
        exists<MyCoin>(addr)
    }
 
    #[test]
    fun make_sure_non_zero_coin_passes() {
        let coin = MyCoin { value: 1 };
        let MyCoin { value: _ } = make_sure_non_zero_coin(coin);
    }
 
    #[test]
    // Or #[expected_failure] if we don't care about the abort code
    #[expected_failure(abort_code = 0, location = Self)]
    fun make_sure_zero_coin_fails() {
        let coin = MyCoin { value: 0 };
        let MyCoin { value: _ } = make_sure_non_zero_coin(coin);
    }
 
    #[test_only] // test only helper function
    fun publish_coin(account: &signer) {
        move_to(account, MyCoin { value: 1 })
    }
 
    #[test(a = @0x1, b = @0x2)]
    fun test_has_coin(a: signer, b: signer) {
        publish_coin(&a);
        publish_coin(&b);
        assert!(has_coin(@0x1), 0);
        assert!(has_coin(@0x2), 1);
        assert!(!has_coin(@0x3), 1);
    }
}

Running Test

INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING aptos_by_examples
Running Move unit tests
[ PASS    ] 0x42::my_module::make_sure_non_zero_coin_passes
[ PASS    ] 0x42::my_module::make_sure_zero_coin_fails
[ PASS    ] 0x42::my_module::test_has_coin
Test result: OK. Total tests: 3; passed: 3; failed: 0
{
  "Result": "Success"
}