mcpField
J
junit

junit

github.com/claude-dev-suiteテスト・品質4652 回インストール4 日前に更新
リポジトリ

junit について

Java 開発者向けの JUnit 5 クイックリファレンススキルです。一般的なテストパターンやアノテーション、アンチパターン、トラブルシューティングを扱います。

主な機能

  1. 01JUnit 5 のテストパターン
  2. 02Mockito によるサービスのテスト
  3. 03Spring Boot テスト例
  4. 04一般的なアノテーション
  5. 05アンチパターンとトラブルシューティング

活用シーン

  1. 01Java コードの単体テスト作成
  2. 02Mockito を使ったサービスのテスト
  3. 03Spring Boot のコントローラーやリポジトリのテスト

インストール

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

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill junit

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

詳細

JUnit 5 - クイックリファレンス

詳しい知識:包括的なドキュメントについては、テクノロジーに junit を指定して mcp__documentation__fetch_docs を使用してください。

このスキルを使用しない場合

  • コンテナーを使用する統合テスト - Docker ベースのテストには testcontainers を使用してください
  • REST API テスト - HTTP/REST のテストには rest-assured を使用してください
  • Web の E2E テスト - Selenium または Playwright を使用してください
  • JavaScript/TypeScript - JS/TS には vitest または jest を使用してください
  • データベース統合テスト - spring-boot-integration スキルと組み合わせてください

基本パターン

基本的なテスト
@Test
void shouldAddNumbers() {
    assertEquals(5, calculator.add(2, 3));
    assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0));
}
Mockito + サービステスト
@ExtendWith(MockitoExtension.class)
class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserServiceImpl userService;

    @Test
    void shouldCreateUser() {
        when(userRepository.save(any())).thenReturn(user);

        UserResponse result = userService.create(request);

        assertNotNull(result);
        verify(userRepository, times(1)).save(any());
    }
}
Spring Boot テスト
@SpringBootTest
@ActiveProfiles("test")
class UserServiceIntegrationTest {

    @Autowired
    private UserService userService;

    @MockBean
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        assertNotNull(userService);
    }
}
コントローラーテスト
@WebMvcTest(UserController.class)
class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private UserService userService;

    @Test
    void shouldReturnUsers() throws Exception {
        when(userService.findAll()).thenReturn(users);

        mockMvc.perform(get("/api/v1/users"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$[0].name").value("John"));
    }
}
リポジトリテスト
@DataJpaTest
class UserRepositoryTest {

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private UserRepository userRepository;

    @Test
    void shouldFindByEmail() {
        entityManager.persist(user);
        Optional<User> found = userRepository.findByEmail("[email protected]");
        assertTrue(found.isPresent());
    }
}

よく使うアノテーション

アノテーション用途
@Testテストメソッド
@BeforeEach各テストの前にセットアップ
@Mockモックを作成
@InjectMocksモックを注入
@SpringBootTest統合テスト
@WebMvcTestコントローラーテスト
@DataJpaTestリポジトリテスト

アンチパターン

アンチパターン問題点解決策
単体テストで @SpringBootTest を使用する非常に遅い@ExtendWith(MockitoExtension.class) を使用する
プライベートメソッドをテストする実装に依存するパブリック API を通じてテストする
モックをクリーンアップしないテスト同士が影響し合う@BeforeEach、Mockito.reset() を使用する
テストデータをハードコードする保守が難しいテストデータビルダーまたはファクトリーを使用する
モックの呼び出しを検証しない失敗が見逃されるverify() を使用してメソッドが呼び出されたことを確認する
1 つのテストにアサーションが多すぎるデバッグが難しい1 つのテストにつき、論理的なアサーションを 1 つにする
@Disabled のテストを放置する技術的負債が蓄積する無効化されたテストを修正するか削除する

よくある問題の解決

問題考えられる原因解決策
「テストで NullPointerException が発生する」モックが注入されていない@Mock と @InjectMocks のアノテーションを確認する
「呼び出されるはずのメソッドが呼び出されていない」メソッドが呼び出されていない、または引数が誤っているメソッド呼び出しを検証し、引数マッチャーを確認する
テストに時間がかかりすぎる不要な @SpringBootTest の使用単体テストには Mockito を使用する
「UnnecessaryStubbingException」モックをセットアップしたが使用していない未使用の when() ステートメントを削除する
不安定なテスト状態の共有またはタイミングセットアップを分離し、Thread.sleep を避ける
「テストが見つからない」命名規則が誤っているtest* 接頭辞または @Test アノテーションを使用する

リファレンスドキュメント

コメント