Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

go-testing

Goのテストコード全般(テーブル駆動テスト・サブテスト・並列テスト・テストヘルパー・テストダブル・`cmp.Diff`によるアサーションなど)の作成・レビュー・改善時に使用します。特定のパターンを明示しない場合でも、Go関数のテスト作成を求められた際に適用されます。なお、ベンチマークによるパフォーマンステストは対象外です(`go-performance`を参照)。

description の原文を見る

Use when writing, reviewing, or improving Go test code — including table-driven tests, subtests, parallel tests, test helpers, test doubles, and assertions with cmp.Diff. Also use when a user asks to write a test for a Go function, even if they don't mention specific patterns like table-driven tests or subtests. Does not cover benchmark performance testing (see go-performance).

SKILL.md 本文

Go テスト

クイックリファレンス

パターン使用場面
t.Errorデフォルト — 失敗を報告し、実行を継続
t.Fatalセットアップが失敗したか、続行が無意味な場合
cmp.Diff構造体、スライス、マップ、proto を比較
テーブル駆動多くのケースが同じロジックを共有
サブテストフィルタリング、並列実行、または命名が必要
t.Helper()任意のテストヘルパー関数(最初のステートメントとして呼び出し)
t.Cleanup()ヘルパー内の後始末(defer の代わり)

有用なテスト失敗メッセージ

規範: テスト失敗はテストソースを読まずに診断可能でなければならない。

すべての失敗メッセージには、関数名、入力、実際の値(got)、期待値(want)を含める必要があります。YourFunc(%v) = %v, want %v のフォーマットを使用してください。

// Good:
t.Errorf("Add(2, 3) = %d, want %d", got, 5)

// Bad: 関数名と入力が不足
t.Errorf("got %d, want %d", got, 5)

常に got を want の前に出力します。got %v, want %v — 逆にしてはいけません。


アサーションライブラリは使わない

規範: アサーションライブラリを使わない。複雑な比較には cmp.Diff を使用する。

if diff := cmp.Diff(want, got); diff != "" {
    t.Errorf("GetPost() mismatch (-want +got):\n%s", diff)
}

Protocol Buffer の場合、cmp オプションに protocmp.Transform() を追加してください。diff メッセージには常に (-want +got) の方向キーを含めてください。JSON/シリアル化出力を比較するのは避け、代わりに意味論的に比較してください。

カスタム比較ヘルパーまたはドメイン固有のテストユーティリティを書く際は、references/TEST-HELPERS.md を参照してください。


t.Error vs t.Fatal

規範: デフォルトとして t.Error を使用してすべての失敗を 1 回の実行で報告してください。続行が不可能な場合のみ t.Fatal を使用してください。

t.Fatal を選択する場合:

  • セットアップが失敗した(DB 接続、ファイル読み込み)
  • 次のアサーションが前のアサーションの成功に依存している(例:encode の後に decode)

テストゴルーチン以外のゴルーチンから t.Fatal/t.FailNow を呼び出さないでください — 代わりに t.Error を使用してください。

t.Errort.Fatal のどちらかを選択する必要があるヘルパーを書く場合、または両方の詳細な例については、references/TEST-HELPERS.md を参照してください。


テーブル駆動テスト

新しいテーブル駆動テストをスキャフォールドしており、規範的な構造体、ループ、サブテストレイアウトが必要な場合は、assets/table-test-template.go を参照してください。

勧告: 多くのケースが同じロジックを共有する場合、テーブル駆動テストを使用してください。

テーブルテストを使用する場合: すべてのケースが条件付きセットアップ、モッキング、またはアサーションなしで同じコードパスを実行する場合。単一の shouldErr bool は受け入れられます。

テーブルテストを使わない場合: ケースが複雑なセットアップ、条件付きモッキング、または複数の分岐が必要な場合 — 代わりに別のテスト関数を書いてください。

主なルール:

  • ケースが多くの行にまたがるか、同じ型の隣接したフィールドがある場合はフィールド名を使用
  • 失敗メッセージに入力を含める — インデックスで行を識別してはいけません

テーブル駆動テスト、サブテスト、または並列テストを書く場合は、references/TABLE-DRIVEN-TESTS.md を参照してください。

検証: テストを生成または変更した後、go test -run TestXxx -v を実行してテストがコンパイルされ、合格することを確認してください。進める前にコンパイルエラーを修正してください。


テストヘルパー

規範: テストヘルパーは最初に t.Helper() を呼び出し、後始末には t.Cleanup() を使用する必要があります。

func setupTestDB(t *testing.T) *sql.DB {
    t.Helper()
    db, err := sql.Open("sqlite3", ":memory:")
    if err != nil {
        t.Fatalf("Could not open database: %v", err)
    }
    t.Cleanup(func() { db.Close() })
    return db
}

テストヘルパー、クリーンアップ関数、またはカスタム比較ユーティリティを書く場合は、references/TEST-HELPERS.md を参照してください。


テストエラーセマンティクス

勧告: エラーメッセージ文字列ではなく、テストエラーセマンティクスをテストしてください。

// Bad: 脆弱な文字列比較
if err.Error() != "invalid input" { ... }

// Good: 意味論的チェック
if !errors.Is(err, ErrInvalidInput) { ... }

特定のセマンティクスが重要でない単純な存在チェックの場合:

if gotErr := err != nil; gotErr != tt.wantErr {
    t.Errorf("f(%v) error = %v, want error presence = %t", tt.input, err, tt.wantErr)
}

テスト構成

テストダブル、テストパッケージの配置の選択、またはテストセットアップのスコープを扱う場合は、references/TEST-ORGANIZATION.md を参照してください。

再利用可能なテスト検証関数を設計する場合は、references/VALIDATION-APIS.md を参照してください。


統合テスト

TestMain、受け入れテスト、または実際の HTTP/RPC トランスポートが必要なテストを書く場合は、references/INTEGRATION.md を参照してください。


利用可能なスクリプト

  • scripts/gen-table-test.sh — テーブル駆動テストのスキャフォールドを生成
bash scripts/gen-table-test.sh ParseConfig config > config/parse_config_test.go
bash scripts/gen-table-test.sh --parallel ParseConfig config      # t.Parallel() 付き
bash scripts/gen-table-test.sh --output config/parse_config_test.go ParseConfig config

関連スキル

  • エラーテスト: errors.Is/errors.As またはセンチネルエラーを使用してエラーセマンティクスをテストする場合は、go-error-handling を参照してください。
  • インターフェースモッキング: コンシューマー側でインターフェースを実装してテストダブルを作成する場合は、go-interfaces を参照してください。
  • テスト関数の命名: テスト関数、サブテスト、またはテストヘルパーユーティリティに命名する場合は、go-naming を参照してください。
  • リンター統合: CI または pre-commit フックでリンターをテストと一緒に実行する場合は、go-linting を参照してください。

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
cxuu
リポジトリ
cxuu/golang-skills
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/cxuu/golang-skills / ライセンス: Apache-2.0

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: cxuu · cxuu/golang-skills · ライセンス: Apache-2.0