Move 튜토리얼 (3) — 모듈에 단위 테스트 추가하기
이전 글: Move 튜토리얼 (2) — 모듈 작성하기 (링크)
안녕하세요, CC Lab 입니다. 이번에는 저번에 만들었던 첫 번째 Move 모듈에 단위 테스트를 추가해보겠습니다. 해당 글은 Move 공식 깃허브를 참고하여 작성되었습니다.
이제 디렉토리를 step_2/BasicCoin
으로 변경하여 발행이 예상대로 작동하는지 확인하는 테스트를 살펴보겠습니다. Move의 단위 테스트는 Rust의 단위 테스트와 유사합니다. 테스트는 #[test]
로 주석 처리되고 일반적인 Move 함수처럼 작성됩니다.
패키지 test
명령으로 테스트를 실행할 수 있습니다.
move test
이제 FirstModule.move
파일의 내용을 살펴보겠습니다. 새롭게 생긴 것 중에 가장 먼저 보게 될 것은 이 테스트입니다.
module 0xCAFE::BasicCoin {
...
// Declare a unit test. It takes a signer called `account` with an
// address value of `0xC0FFEE`.
#[test(account = @0xC0FFEE)]
fun test_mint_10(account: signer) acquires Coin {
let addr = 0x1::signer::address_of(&account);
mint(account, 10);
// Make sure there is a `Coin` resource under `addr` with a value of `10`.
// We can access this resource and its value since we are in the
// same module that defined the `Coin` resource.
assert!(borrow_global<Coin>(addr).value == 10, 0);
}
}
이것은 test_mint_10
이라는 단위 테스트를 선언하여 값이 10인 계정 아래에 Coin
구조체를 발행합니다. 그런 다음 저장소에 발행된 발행된 코인이 assert!
호출에서 기대하는 값을 갖는지 확인합니다 어설션이 실패하면 단위 테스트가 실패합니다.
상위 개념 및 연습
볼만한 가치가 있는 테스트 관련 주석이 많이 있으며 여기에서 찾을 수 있습니다. 이들 중 일부는 튜토리얼 5단계 에서 사용된 것을 볼 수 있습니다.
단위 테스트를 실행하기 전에 항상 Move 표준 라이브러리에 대한 종속성을 추가해야 합니다. 이것은 Move.toml
의 [dependencies] 섹션에 항목을 추가하여 수행할 수 있습니다. 예:
[dependencies]
MoveStdlib = { local = "../../../../move-stdlib/", addr_subst = { "std" = "0x1" } }
<path_to_move>/language
아래의 move-stdlib
디렉토리를 가리키도록 경로를 변경해야 할 수도 있습니다. 깃 종속성을 지정할 수도 있습니다. 여기에서 패키지 종속성 이동에 대해 자세히 알아볼 수 있습니다.
연습하기
테스트가 실패하도록 어설션을 11로 변경합니다. 테스트가 실패할 때 전역 상태를 표시하는 move test
명령에 전달할 수 있는 플래그를 찾으세요. 다음과 같이 표시되어야 합니다.
┌── test_mint_10 ──────
│ error[E11001]: test failure
│ ┌─ ./sources/FirstModule.move:24:9
│ │
│ 18 │ fun test_mint_10(account: signer) acquires Coin {
│ │ ------------ In this function in 0xcafe::BasicCoin
│ ·
│ 24 │ assert!(borrow_global<Coin>(addr).value == 11, 0);
│ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Test was not expected to abort but it aborted with 0 here
│
│
│ ────── Storage state at point of failure ──────
│ 0xc0ffee:
│ => key 0xcafe::BasicCoin::Coin {
│ value: 10
│ }
│
└──────────────────
테스트 커버리지 정보를 수집할 수 있는 플래그를 찾은 다음 커버리지 통계 및 소스 커버리지를 보기 위해 move coverage
명령을 통해 탐색해보세요.