JUnit Jupiter TestEngineエラー:テスト発見失敗の解決方法
JUnit 5を使用したテスト実行時に「TestEngine with ID 'junit-jupiter' failed to discover tests
」というエラーが発生する問題は、様々な原因によって引き起こされます。この記事では、このエラーの原因と効果的な解決策を詳しく解説します。
問題の概要
このエラーは、JUnit Jupiter TestEngineがテストクラスやテストメソッドを正しく発見できない場合に発生します。主な原因は以下のとおりです:
- 依存関係のバージョン不一致
- テストディレクトリの設定誤り
- クラスパス問題
- Javaバージョン関連の設定
解決策
1. 依存関係の整合性を確保する
JUnit 5の各コンポーネント間でバージョンの不一致があると、このエラーが発生します。最も一般的な解決策は、すべてのJUnit関連依存関係のバージョンを統一することです。
Gradleの場合
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.2'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.2'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.9.2'
}
test {
useJUnitPlatform()
}
Mavenの場合
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
2. BOM(Bill of Materials)を使用する
JUnit BOMを使用することで、すべてのJUnitコンポーネントのバージョン管理を一元化できます。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.10.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3. Spring Bootプロジェクトの場合
Spring Bootのスターターを使用している場合は、個別にJUnit依存関係を追加する必要はありません。
testImplementation 'org.springframework.boot:spring-boot-starter-test'
WARNING
Spring BootのバージョンとJUnitのバージョンに互換性があることを確認してください。Spring Boot 3.xではJUnit 5.8+が推奨されます。
4. IDE設定の確認(IntelliJ)
IntelliJ IDEAを使用している場合、テストディレクトリが正しく設定されていることを確認してください。
- プロジェクト構造を開く(⌘; / Ctrl+Alt+Shift+S)
- 「Modules」タブを選択
- テストディレクトリが「Tests」としてマークされていることを確認
5. Javaプレビュー機能の問題
Javaのプレビュー機能を使用している場合、テスト実行時にも--enable-preview
フラグが必要です。
Maven Surefireプラグイン設定
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<configuration>
<argLine>--enable-preview</argLine>
</configuration>
</plugin>
6. 依存関係の衝突解消
依存関係の衝突を確認するには、以下のコマンドを使用します。
Mavenの場合
mvn dependency:tree
Gradleの場合
gradle dependencies
出力結果で、異なるバージョンのJUnitコンポーネントが存在しないか確認してください。
トラブルシューティングチェックリスト
- 依存関係のバージョン一致性: すべてのJUnitコンポーネントが同じバージョンか
- テストディレクトリ設定: テストクラスが正しいディレクトリにあるか
- クラス名とメソッド名: テストクラスが
*Test.java
で終わるか - Javaバージョン: コンパイルと実行時のJavaバージョンが一致しているか
- IDE設定: IDEのテスト設定が正しいか
- キャッシュクリア: プロジェクトのクリーンビルドを実行
推奨設定
現在の安定版であるJUnit 5.9.xまたは5.10.xの使用を推奨します。バージョン5.8.2では既知の問題があるため、最新のパッチバージョンへのアップグレードを検討してください。
// 推奨されるGradle設定
dependencies {
testImplementation platform('org.junit:junit-bom:5.10.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
まとめ
「TestEngine with ID 'junit-jupiter' failed to discover tests」エラーは主に依存関係の不一致によって発生します。JUnit BOMの使用やバージョンの統一、IDE設定の確認など、体系的なアプローチで問題解決が可能です。最新の安定版を使用し、公式ドキュメントに従った設定を行うことで、この問題を回避できます。
INFO
JUnit 5の詳細な設定については、公式ドキュメントを参照してください。