![見出し画像](https://assets.st-note.com/production/uploads/images/108354563/rectangle_large_type_2_66a87abf30dab9c58542ec1de790bdf4.png?width=800)
【完全保存版】AstarのWASMコントラクトでテストコードを書いてみよう!
0 はじめに
今回は、WASMのコントラクトのテストケースを作ってみましょう。
下の2つの関数に対するテストを行います。
① set_your_apple関数(その名の通り、リンゴをセットする)
![](https://assets.st-note.com/img/1686866779596-voF760sn7c.png?width=800)
② get_your_apple関数(その名の通り、リンゴをセットする)
![](https://assets.st-note.com/img/1686866785279-zszJ77MgbO.png?width=800)
1 #[cfg(test)]について
テストはこちらの#[cfg(test)]で作成していきます。
これにより、テスト環境でのみコンパイルされます。
![](https://assets.st-note.com/img/1686869400951-c8cAd1kBMj.png?width=800)
2 testsモジュールについて
下のようにして、モジュールを作ります。
単体テストをグループ化しています。
![](https://assets.st-note.com/img/1686869525126-vudldUZa2C.png?width=800)
3 use super::*について
「user super::*」によって、親モジュールから全ての公開(pub)アイテムをインポートします。
![](https://assets.st-note.com/img/1686869669049-uO5GxC0C3J.png?width=800)
今回の構造は下のようになっているため、親モジュールは「my_psp34_mintable」です。
ここからインポートしています。
![](https://assets.st-note.com/img/1686870440817-EMPh9uLtrr.png?width=800)
4 #[ink::test]について
テストコードを書くとき、関数の上に書きます。
![](https://assets.st-note.com/img/1686870584333-KYTXWEEDa1.png?width=800)
5 インスタンスの生成について
下の部分で、コントラクトのインスタンスを生成しています。
![](https://assets.st-note.com/img/1686870845289-wjhC9BMoC0.png?width=800)
コードを見ると、メインの「Contract」が「pub」になっています。
そのため、3章で出てきた、「use super::*」でインポートされています。
![](https://assets.st-note.com/img/1686870966271-ooEyr5fRxQ.png?width=800)
そして、下の実装箇所を見ると、new関数があることが確認できました。
![](https://assets.st-note.com/img/1686871086480-Y7AaGgDovT.png?width=800)
ちなみに、中身も少し見てみましょう。
「Self」は現在実装している型である、「Contract」を示しています。
![](https://assets.st-note.com/img/1686871316756-2ynuJJVHH4.png?width=800)
default()はその名の通り、デフォルト値を設定しています。
これは#[derive(Default)]でデフォルトトレイトを実装しているため、使用できます。
![](https://assets.st-note.com/img/1686871459546-EfbvxwbmU8.png?width=800)
6 アカウントの作成について
次は、アカウントの作成についてです。
from関数を使って、型の変換を行っています。
![](https://assets.st-note.com/img/1686871824306-JfWruskOk2.png?width=800)
次に、[0x0; 32]を見てみましょう。
![](https://assets.st-note.com/img/1686872032933-Sjr9k38kHL.png?width=800)
これは、32バイト全てが「0x0」であるバイト配列です。
つまり下のようになります。(「0x0」と「0x00」は同じです。)
![](https://assets.st-note.com/img/1686872376489-fDwSLT4Wv0.png?width=800)
このバイト配列をAccountId型に変換しています。
これにより、全てが0のアカウントIDがつくられます。
7 assert_eq!について
「assert_eq!」は二つの引数を比較します。
ちなみに、比較を行うには、2つの値が「PartialEq」 トレイトを実装している必要があります。
![](https://assets.st-note.com/img/1686872938260-1zh68LI4Pk.png?width=800)
「get_your_apple」関数を見ると、下のように「u16」型を返しています。
この型が「PartialEq」トレイトを実装しているため、比較を行うことができます。
![](https://assets.st-note.com/img/1686873109773-kWqCMCy8tq.png?width=800)
今回は以上です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊