メインコンテンツへスキップ

前提条件

Foundryプロジェクトがセットアップ済みで、スマートコントラクトのコンパイルが成功している必要があります。 その方法については Foundryのセットアップとスマートコントラクトのコンパイル チュートリアルを参照してください。

テスト仕様の編集

テスト対象のスマートコントラクトは最小限のものなので、必要なテストケースも最小限です。 テスト前に、スマートコントラクトをデプロイする必要があります。 これは setUp ブロックで行われます。 スマートコントラクトは単独では実行できず、EVM内で実行する必要があるためです。 Foundryでは、デフォルトでテストはエミュレートされたインメモリEVMインスタンスで実行され、一時的なものなので、デプロイは形式的なものです。 ファイルを開きます: test/Counter.t.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

import { Test } from "forge-std/Test.sol";
import { Counter } from "../src/Counter.sol";

contract CounterTest is Test {
    Counter public counter;

    function setUp() public {
        counter = new Counter();
    }

    function testInitialValue() public view {
        assertEq(counter.value(), 0);
    }

    function testIncrementValueFromZero() public {
        counter.increment(100);
        assertEq(counter.value(), 100);
    }

    function testIncrementValueFromNonZero() public {
        counter.increment(100);
        counter.increment(23);
        assertEq(counter.value(), 123);
    }
}

3つのテストケースがあります:
  • 初期 value() の確認。
  • increment(num) を呼び出し、value() が更新されたことを確認。
  • increment(num) を再度呼び出し、value() が再度更新されたことを確認。

スマートコントラクトに対するテストの実行

以下のコマンドでテストを実行します。
forge test

テスト出力の確認

すべてのテストが計画通りに動作すれば、以下のような出力が表示されます:
Ran 3 tests for test/Counter.t.sol:CounterTest
[PASS] testIncrementValueFromNonZero() (gas: 32298)
[PASS] testIncrementValueFromZero() (gas: 31329)
[PASS] testInitialValue() (gas: 10392)
Suite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.35ms (3.16ms CPU time)

Ran 1 test suite in 171.04ms (5.35ms CPU time): 3 tests passed, 0 failed, 0 skipped (3 total tests)

次のステップ

スマートコントラクトのテストが完了したので、次はスマートコントラクトのデプロイです! Foundryを使用したスマートコントラクトのデプロイ チュートリアルに進みましょう。