mcpField
T
test-automator

test-automator

github.com/zhaono1テスト・品質85813 回インストール9 週間前に更新
リポジトリ

test-automator について

test-automatorは、さまざまな言語やフレームワークで自動テストを作成・保守する開発者向けのスキルです。ユニット、統合、E2Eテストに加え、カバレッジやテスト設計の指針を扱います。

主な機能

  1. 01ユニット・統合・E2Eテストの指針
  2. 02カバレッジ目標とレポートコマンド
  3. 03テストの命名と設計原則
  4. 04フレームワーク別の例
  5. 05テスト雛形とレポート用スクリプト

活用シーン

  1. 01新機能のテスト計画
  2. 02既存プロジェクトのカバレッジ改善
  3. 03統合・E2Eテストの実践方法の検討

インストール

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

$npx skills add https://github.com/zhaono1/agent-playbook --skill test-automator

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
references/
best-practices.md
mocking.md
references/examples/
README.md
unit-test-example.md
scripts/
coverage_report.py
generate_test.py

詳細

テスト自動化

さまざまなフレームワークと言語で、自動テストを作成・保守するエキスパートです。

このスキルが有効になる条件

以下の場合に有効になります。

  • テストの作成を依頼したとき
  • テスト自動化について言及したとき
  • テストカバレッジの改善を依頼したとき
  • テストフレームワークの設定が必要なとき

テストピラミッド

        /\
       /E2E\      - Few, expensive, slow
      /------\
     /  Integration \ - Moderate number
    /--------------\
   /     Unit Tests  \ - Many, cheap, fast
  /------------------\

単体テスト

原則
  1. 実装ではなく、振る舞いをテストする
  2. 1つのテストにつきアサーションは1つ(通常)
  3. Arrange-Act-Assert パターン
  4. 説明的なテスト名
例(Jest)
describe('UserService', () => {
  describe('createUser', () => {
    it('should create a user with valid data', async () => {
      // Arrange
      const userData = {
        name: 'John Doe',
        email: '[email protected]'
      };

      // Act
      const user = await userService.create(userData);

      // Assert
      expect(user.id).toBeDefined();
      expect(user.email).toBe(userData.email);
    });

    it('should throw error for invalid email', async () => {
      // Arrange
      const userData = { email: 'invalid' };

      // Act & Assert
      await expect(userService.create(userData))
        .rejects.toThrow('Invalid email');
    });
  });
});

統合テスト

原則
  1. コンポーネント間の連携をテストする
  2. 外部サービスにはテストダブルを使用する
  3. テストデータをクリーンアップする
  4. 独立した状態で実行する
例(Supertest)
describe('POST /api/users', () => {
  it('should create a user', async () => {
    const response = await request(app)
      .post('/api/users')
      .send({
        name: 'John Doe',
        email: '[email protected]'
      })
      .expect(201)
      .expect((res) => {
        expect(res.body.id).toBeDefined();
        expect(res.body.email).toBe('[email protected]');
      });
  });
});

E2E テスト

原則
  1. 重要なユーザーフローをテストする
  2. 現実的なテストデータを使用する
  3. 非同期処理を適切に扱う
  4. テスト後にクリーンアップする
例(Playwright)
test('user can login', async ({ page }) => {
  await page.goto('/login');
  await page.fill('[name="email"]', '[email protected]');
  await page.fill('[name="password"]', 'password123');
  await page.click('button[type="submit"]');

  await expect(page).toHaveURL('/dashboard');
  await expect(page.locator('h1')).toContainText('Welcome');
});

テストカバレッジ

カバレッジ目標
種類目標
行> 80%
分岐> 75%
関数> 80%
文> 80%
カバレッジレポート
# Jest
npm test -- --coverage

# Python (pytest-cov)
pytest --cov=src --cov-report=html

# Go
go test -coverprofile=coverage.out
go tool cover -html=coverage.out

テストのベストプラクティス

推奨事項
  • バグを修正する前にテストを書く(TDD)
  • エッジケースをテストする
  • テストを独立させる
  • 説明的なテスト名を使う
  • 外部依存関係をモックする
  • テストデータをクリーンアップする
禁止事項
  • 実装の詳細をテストしない
  • 壊れやすいテストを書かない
  • 理由なくテストをスキップしない
  • コメントアウトしたテストをコミットしない
  • サードパーティ製ライブラリをテストしない

テストの命名規則

// Good: Describes what is being tested
it('should reject invalid email addresses')

// Good: Describes the scenario and outcome
it('returns 401 when user provides invalid credentials')

// Bad: Vague
it('works correctly')

よく使われるテストフレームワーク

言語フレームワークコマンド
TypeScript/JSJest, Vitestnpm test
Pythonpytestpytest
Gotestinggo test
JavaJUnitmvn test
Rustbuilt-incargo test

スクリプト

テストのひな形を生成します:

python3 scripts/generate_test.py --name <feature> --output tests/test-plan.md

テストカバレッジを確認します:

python3 scripts/coverage_report.py --name <service-name> --output coverage-report.md

参考資料

  • references/best-practices.md - テストのベストプラクティス
  • references/examples/ - フレームワーク別の例
  • references/mocking.md - モックのガイドライン

コメント