junit について
Java と Kotlin の単体テスト作成を支援するスキルです。JUnit 4/JUnit 5 のテストライフサイクル、アサーション、パラメーター化テスト、モック、Maven または Gradle での実行を扱います。
主な機能
- 01JUnit 4/JUnit 5 のテスト作成
- 02ライフサイクルアノテーションとアサーション
- 03パラメーター化テストの作成
- 04Mockito による依存のモック化
- 05Maven/Gradle でのテスト実行
活用シーン
- 01Java/Kotlin の単体テスト作成
- 02セットアップと後処理を含むテスト構成
- 03複数の入力値を使ったテスト
- 04依存をモック化した単体テスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ partme-ai/ full-stack-skills --skill junitインストール後、Claude Code で/junitを入力して読み込まれたか確認します。
同梱ファイルLICENSE.txt
詳細
このスキルを使用するタイミング
ユーザーが次のことを希望する場合は、いつでもこのスキルを使用してください。
- JUnit 4 または JUnit 5(Jupiter)を使用して Java または Kotlin の単体テストを作成する
- アノテーション(@Test、@BeforeEach、@AfterEach、@ParameterizedTest)を使用する
- アサーション(assertEquals、assertThrows、assertAll)を適用する
- Mockito または AssertJ を統合して、モックや流れるようなアサーションを使用する
- Maven Surefire または Gradle でテストの実行を設定する
このスキルの使い方
ワークフロー
@Testを付けたテストクラスとテストメソッドを作成する- ライフサイクルアノテーションを使用して、テスト状態をセットアップおよびティアダウンする
- アサーションを使用して、期待される動作を検証する
- Mockito で依存関係をモックし、単体テストを分離する
1. 基本的な JUnit 5 テスト
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@Test
void shouldAddTwoNumbers() {
Calculator calc = new Calculator();
assertEquals(5, calc.add(2, 3));
}
@Test
void shouldThrowOnDivideByZero() {
Calculator calc = new Calculator();
assertThrows(ArithmeticException.class, () -> calc.divide(1, 0));
}
}
2. ライフサイクルアノテーション
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
class UserServiceTest {
private UserService userService;
@BeforeEach
void setUp() {
userService = new UserService(new InMemoryUserRepository());
}
@AfterEach
void tearDown() {
// Clean up resources
}
}
3. パラメーター化テスト
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
class StringTest {
@ParameterizedTest
@CsvSource({"hello,5", "'',0", "junit,5"})
void shouldReturnCorrectLength(String input, int expected) {
assertEquals(expected, input.length());
}
}
4. Mockito を使ったモック
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
@Mock private OrderRepository orderRepository;
@InjectMocks private OrderService orderService;
@Test
void shouldSaveOrder() {
Order order = new Order("item-1", 2);
orderService.placeOrder(order);
verify(orderRepository).save(order);
}
}
5. テストの実行
# Maven
mvn test
# Gradle
gradle test
# With coverage (JaCoCo)
mvn test jacoco:report
ベストプラクティス
- テストは独立して繰り返し実行できるようにし、実行順序や外部サービスへの依存を避けます
- Mockito を使用して、テスト対象のユニットを依存関係から分離します
- テストには内容が分かる名前を付けます(例:
shouldReturnEmptyListWhenNoUsersExist) - カバレッジとテスト速度のバランスを取り、CI ではテストスイート全体を実行します
@Nestedクラスを使用して、関連するテストケースをグループ化します
リソース
- JUnit 5 ユーザーガイド:https://junit.org/junit5/docs/current/user-guide/
- Mockito:https://site.mockito.org/
- AssertJ:https://assertj.github.io/doc/
キーワード
junit, JUnit 5, JUnit Jupiter, 単体テスト, Java, Kotlin, アサーション, Mockito, パラメーター化テスト, BeforeEach, AfterEach, テストライフサイクル
コメント
Markdown 対応