mcpField
T
testing-unit

testing-unit

github.com/alphaonedevテスト・品質43 回インストール
リポジトリ

testing-unit について

JavaScript、Python、Go、Ruby、Swift、Javaの開発者向け単体テストスキルです。各言語のテストフレームワークを使い、依存関係のモック化とテストの分離を支援します。

主な機能

  1. 01モックとスタブ応答の作成
  2. 02副作用を抑えたテスト分離
  3. 03複数言語のテストフレームワークに対応
  4. 04テストフレームワークと環境の設定
  5. 05CI/CDへの単体テスト統合

活用シーン

  1. 01新しい関数の単体テスト作成
  2. 02APIやデータベース依存のモック化
  3. 03リファクタリング時のテスト失敗の調査
  4. 04TDDワークフローでの実装検証

インストール

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

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill testing-unit

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

詳細

目的

このスキルは、JavaScript の Jest/Vitest、Python の pytest、Go の testify、Ruby の RSpec、Swift の XCTest、Java の JUnit5 などのフレームワークを使った単体テストを AI が支援できるようにします。依存関係のモックやスタブの作成、テストの分離に重点を置き、制御された環境でコードの動作を検証します。

使用するタイミング

新しい単体テストを作成するとき、既存のテストをデバッグするとき、または分離されたテストが必要なコードをリファクタリングするときに、このスキルを使用します。TDD ワークフロー、外部 API やデータベースのモック、関数が独立して動作することの確認にも適用します。たとえば、ネットワーク呼び出しに依存する関数では、実際の依存関係を使わずローカルでテストできるよう、呼び出しをモックします。

主な機能

  • モック:関数やモジュールのモックを作成します。たとえば Jest では、jest.mock('module') を使って実際の実装を置き換えます。
  • スタブ:スタブの応答を定義します。たとえば pytest では、monkeypatch.setattr() を使ってオブジェクトのメソッドを偽装します。
  • 分離:テストを分離して実行します。たとえば、Go の testify で副作用を起こさずにアサーションを行ったり、JUnit5 の @TempDir でファイル操作を分離したりします。
  • フレームワーク固有の機能:Jest/Vitest のアサーション(例:expect().toBe())、セットアップ/ティアダウン用の pytest フィクスチャ、モック用の RSpec の double、分離用の XCTest の setUp()、JUnit5 の @Mock アノテーションをサポートします。
  • 設定形式:カスタムモックには Jest の jest.config.js で { testEnvironment: 'node', setupFilesAfterEnv: ['<rootDir>/setupTests.js'] } を使用します。詳細な出力には pytest の pytest.ini で [pytest] addopts = -v を使用します。

使用パターン

単体テストのタスクを実行するには、次の手順に従います。1) モックする依存関係(例:HTTP 呼び出し)を特定します。2) テストファイルでモックまたはスタブを設定します。3) 出力を検証するアサーションを記述します。4) 適切なフラグを指定してテストを実行します。TDD では、まず失敗するテストを記述してから、コードを実装します。Jest では describe() ブロックを使ってテストを構成し、pytest では共有するセットアップにフィクスチャを使用します。グローバル状態を避けてテストを常に分離します。Jest では beforeEach()、pytest では @pytest.fixture(scope='function') を使用します。

一般的なコマンド/API

  • Jest/Vitest:対話モードでは npx jest --watchAll を使ってテストを実行します。jest.mock('axios', () => ({ get: jest.fn().mockResolvedValue({ data: {} }) })); でモジュールをモックします。API:アサーションには expect(value).toEqual(expected) を使用します。
  • pytest:カバレッジを計測するには pytest tests/ -v --cov で実行します。def test_function(monkeypatch): monkeypatch.setattr('module.func', lambda: 'stubbed') で関数をスタブ化します。API:分離には @pytest.fixture を活用します。例:def mock_db(): return {'query': lambda: []}。
  • Go(testify):go test -v ./... でビルドし、testify の mock.Mock を使用します。例:mockCtrl := gomock.NewController(t); mockObj := NewMockInterface(mockCtrl); mockObj.EXPECT().Method().Return(value)。
  • RSpec:rspec spec/ で実行します。double('Object', method: -> 'stubbed') でダブルを作成します。API:expect { code }.to change { something } を使用します。
  • XCTest:xcodebuild test でコンパイルして実行します。Swift では protocol のスタブを使ってモックします。例:class MockService: ServiceProtocol { func fetchData() -> Data { return Data() } }。
  • JUnit5:./gradlew test で実行します。Mockito は @ExtendWith(MockitoExtension.class) public class TestClass { @Mock private Dependency dep; @InjectMocks private ClassUnderTest cut; } のように使用します。外部サービスを統合する場合は、テストの認証に $API_KEY などの環境変数を設定します。

統合に関する注意事項

単体テストを CI/CD パイプラインに組み込んで、このスキルを統合します。たとえば、Jest を GitHub Actions のワークフローに追加し、run: npm test を実行します。複数の言語を使用するプロジェクトでは、Jest と pytest などのツールを使うモノレポ構成にします。シークレット用の環境変数を設定します。たとえば、テストランナーで $DATABASE_URL をエクスポートします。Jest 用の Istanbul や pytest 用の Coverage.py など、コードカバレッジツールと連携します。デバッグ時に --no-cov フラグを使用し、モックがこれらのツールに適切に対応するようにします。API に依存するテストでは、$SERVICE_API_KEY などの環境変数をテストコマンドに渡します。たとえば、pytest --api-key=$SERVICE_API_KEY を実行します。

エラー処理

よくあるエラーには、適切な方法で対処します。Jest でアサーションに失敗した場合は、スタックトレースを確認し、jest.fn().mockImplementation() を使ってモックをデバッグします。モックが呼び出されていない場合は、.toHaveBeenCalled() アサーションを追加します。pytest では、フィクスチャのエラーを try/except で囲んで捕捉します。例:def test_with_fixture(fix): try: fix.setup() except Exception as e: pytest.fail(str(e))。Go では、testify の assert.NoError(t, err) を使い、エラーが発生したテストを失敗させます。RSpec では、allow(double).to receive(:method).and_raise(Error) を使ってダブルのエラーを処理します。JUnit5 では、想定される失敗に @Test(expected = Exception.class) を使います。連鎖的な失敗を防ぐため、エラーが起きやすいコードは常にスタブで分離します。詳細な出力を確認するには、jest --debug や pytest -s などの詳細表示フラグを指定して再実行します。

具体的な使用例

  1. Jest のモックの例:データを取得する関数をテストするには、fetch API をモックします。
    jest.mock('node-fetch'); const fetch = require('node-fetch'); fetch.mockResolvedValue({ json: () => Promise.resolve({ data: 'mocked' }) }); test('fetches data', async () => { expect(await fetchData()).toEqual('mocked'); });

  2. pytest のフィクスチャの例:データベースに依存するテストを分離するには、フィクスチャを使います。
    import pytest @pytest.fixture def mock_db(): return {'query': lambda: [{'id': 1}]} def test_query(mock_db): assert mock_db['query']()[0]['id'] == 1

グラフ上の関係

  • 関連:testing-integration(より幅広いテストワークフロー向け)、code-debugging(テスト失敗の修正向け)
  • クラスター:testing(テストクラスターの一部)、code-execution(分離された環境でのテスト実行向け)
  • 依存:environment-setup(モックなどのテスト依存関係の管理向け)

コメント