mcpField
S
solidity-testing

solidity-testing

github.com/0xlayerghostテスト・品質4135 回インストール2 週間前に更新
リポジトリ

solidity-testing について

solidity-testingは、Foundryを使うSolidityプロジェクト向けのテスト規範です。テストの構成や各種ケースの網羅、ファズテストの作成、個別または全テストの実行方法を示します。

主な機能

  1. 01テストファイルの構成と命名規則
  2. 02主要関数のシナリオ網羅要件
  3. 03Foundryチートコードのリファレンス
  4. 04計算・資金フロー向けファズテスト
  5. 05対象を絞ったテスト実行コマンド

活用シーン

  1. 01コントラクトごとにテストを整理
  2. 02権限、境界値、失敗経路を検証
  3. 03資金フロー関数のファズテストを追加
  4. 04個別テストまたは全テストを実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/0xlayerghost/solidity-agent-kit --skill solidity-testing

インストール後、Claude Code で/solidity-testingを入力して読み込まれたか確認します。

詳細

テスト標準

言語ルール

  • 常にユーザーが使用しているのと同じ言語で応答してください。 ユーザーが中国語で尋ねた場合は中国語で、英語で尋ねた場合は英語で応答してください。

テストの構成

  • ソースコントラクトごとにテストコントラクトを1つ作成します:MyToken.sol → MyToken.t.sol
  • ファイルの場所:すべてのテストを test/ ディレクトリに配置します
  • 命名:成功するテストには test_<feature>_<scenario>、リバートが期待されるテストには testFail_<feature>_<scenario> を使用します
    • 例:test_transfer_revertsWhenInsufficientBalance
    • 例:test_stake_updatesBalanceCorrectly
  • 独立性:各テストは単独で実行できる必要があります。共有状態には setUp() を使用し、テスト間の依存関係を作らないでください
  • フィルタリング:対象を絞った実行に --match-test と --match-contract を使用できるようにします

カバレッジ要件

すべてのコア関数について、次のシナリオをカバーするテストを用意する必要があります。

シナリオ検証内容
正常系標準的な入力 → 期待される出力、正しい状態変更
権限チェック権限のない呼び出し元 → 正しいエラーを指定した vm.expectRevert
境界条件ゼロ値、最大値(type(uint256).max)、オフバイワン
失敗シナリオすべての require / revert / カスタムエラーの経路
状態変更ストレージの更新、残高の変更、イベントの発行(vm.expectEmit)
エッジケース空の配列、重複する呼び出し、自分自身への送金

Foundry チートコード早見表

チートコード用途
vm.prank(addr)次の呼び出しを addr から行います
vm.startPrank(addr)vm.stopPrank() が呼び出されるまで、すべての呼び出しを addr から行います
vm.warp(timestamp)block.timestamp を設定します
vm.roll(blockNum)block.number を設定します
vm.deal(addr, amount)ETH 残高を設定します
vm.expectRevert(error)次の呼び出しで、指定されたエラーによるリバートが発生することを確認します
vm.expectEmit(true,true,false,true)イベントの発行を検証します(トピックを確認)
vm.record() / vm.accesses()ストレージの読み取り/書き込みを追跡します
makeAddr("name")トレースを読みやすくする、ラベル付きアドレスを作成します

ファズテストのルール

  • 数学処理が多い関数と資金フロー関数には、すべてファズテストを用意する必要があります
  • パターン:function testFuzz_<name>(uint256 amount) public
  • vm.assume() を使って入力を制約します:vm.assume(amount > 0 && amount < MAX_SUPPLY);
  • デフォルトの実行回数:256。重要な関数では forge test --fuzz-runs 10000 のように10,000回以上に増やします

よく使うコマンド

# Run all tests
forge test

# Run specific test function
forge test --match-test test_transfer

# Run specific test contract
forge test --match-contract MyTokenTest

# Verbose output with full trace
forge test -vvvv

# Gas report
forge test --gas-report

# Fuzz with more runs
forge test --fuzz-runs 10000

# Test coverage
forge coverage

# Coverage with report
forge coverage --report lcov

コメント