> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-docs-ai-sdk.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Foundryを使用したスマートコントラクトのテスト

## 前提条件

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

## テスト仕様の編集

テスト対象のスマートコントラクトは最小限のものなので、必要なテストケースも最小限です。

テスト前に、スマートコントラクトをデプロイする必要があります。
これは `setUp` ブロックで行われます。
スマートコントラクトは単独では実行できず、EVM内で実行する必要があるためです。
Foundryでは、デフォルトでテストはエミュレートされたインメモリEVMインスタンスで実行され、一時的なものなので、デプロイは形式的な処理にすぎません。

ファイルを開きます: `test/Counter.t.sol`

```solidity theme={null}
// 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()` が再度更新されたことを確認。

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

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

```shell theme={null}
forge test
```

## テスト出力の確認

すべてのテストが計画通りに動作すれば、以下のような出力が表示されます：

```text theme={null}
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を使用したスマートコントラクトのデプロイ](./deploy-foundry/) チュートリアルに進みましょう。
