見出し画像

Remixでユニットテストを実行しよう!

本日は、Remixを使って、ユニットテストを実行してみます。

Remixはこちらからです。

1 プラグインを入れよう

まずは、プラグインを入れましょう。

こちらを選択します。

下のように検索すると、「SOLIDITY UNIT TESTING」が出てきます。

「Activate」を押して、有効にしましょう。
(下はすでに有効になっています。)

これでプラグインを入れることができました。

2 テストコードを利用しよう

では、用意されているサンプルのテストコードを使ってみましょう。

下のように選択します。

「ERC20」「Mintable」を選択した上で、「OK」を選択

このようになりました。

「MyToken.test.sol」を確認すると、テストコードが確認できます。

3 テストを実行してみよう

では、実際にテストを実行してみましょう。

「Test directory」は既に「MyToken.test.sol」が入っている「tests」ディレクトリになっています。

「Run」で実行します。

すると、下のようにテストを実行することができました。

4 テストの中身を見てみよう

では、具体的にテストの中身を見てみましょう。

1 TestsAccountsライブラリについて

下のように、「acc0」にアカウントが入っています。

「TestsAccounts」の部分を「Ctrl」キーを押しながら選択すると、下のように、「remix_accounts.sol」を開きました。

こちらの最初のアドレスを取得しています。

2 constructorの設定について

下のように、constructor「acc0」を設定しています。

constructorデプロイ時に一度だけ行われる処理です。

こちらが実際のコントラクトです。

このように、初期の所有者を入れています。

つまり、このテストでは、「acc0」所有者です。

3 beforeAll関数について

次は、beforeAll関数を見てみましょう。

ここで、「acc1」~「acc4」にアカウントを入れています。

なお、beforeAll関数全てのテスト前に一度実行される関数です。

https://remix-ide.readthedocs.io/en/latest/unittesting.html#write-tests

次に実際のテストを見てみましょう。

4 Assertライブラリについて

「Assert.equal」を用いて、2つの値が等しいかを確認しています。

「Assert」「ctrl」キーを押しながら選択すると、ライブラリを確認できます。

関数の中身はこのように確認することができます。

テストの結果を確認すると、関数名が緑色でチェックがついています。

これで、問題なく通ったことがわかります。

5 成功想定のテストについて

中身も少しみてみましょう。

コントラクトの所有者である「acc0」自分自身に対して10,000のミントを行っています。

そして、「Assert.equal」でその値が問題なく10,000になっているかを確認しています。

下の「tetTotalSupply」では、総供給量が10,000になっているかを確認しています。

6 失敗想定のテストについて

次に、失敗を想定したテストを見てみましょう。

ここでは、特別なコメントである、「/// #sender: account-1」が使われています。

これにより、所有者でない「account-1」で実行されます。

そして、下の部分で、「account-1」が「acc0」に向けてミントを行おうとしています。

なお、mint関数は、下のように、「onlyOwner」という修飾子がついています。

そのため、所有者以外が行おうとすると、エラーになります。

結果、下のように、想定通り、エラーになったことを確認できました。

本日は以上です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊