Fessのテストコードを JUnit 4 から JUnit 5(Jupiter)へ移行しました。4000以上のテストケースがあるため、かなりの作業量になりましたが、無事に完了しました。
移行の背景
JUnit 4は長らくJavaのテストフレームワークのデファクトスタンダードでしたが、JUnit 5では以下のような改善が行われています。
- アノテーションの刷新(
@Before→@BeforeEach、@After→@AfterEachなど) - より柔軟な拡張モデル
- ネストしたテストのサポート
- パラメータ化テストの改善
Fessでも最新のテスト環境を維持するため、移行を実施しました。
移行作業の内容
@AfterEachアノテーションの追加
JUnit 5では、テストメソッドの後処理に@AfterEachアノテーションが必要です。従来のtearDown()メソッドに対して、このアノテーションを追加しました。
import org.junit.jupiter.api.AfterEach;
public class SampleTest extends UnitFessTestCase {
@AfterEach
public void tearDown() throws Exception {
// クリーンアップ処理
}
}
この変更だけで6000行以上の修正が必要でした。テストクラスの数が多いため、すべてのtearDown()メソッドにアノテーションを追加し、importステートメントも更新しました。
- PR #3012: fix(test): add @AfterEach annotation for JUnit 5 compatibility
テストカバレッジの向上
移行に合わせて、これまでテストが不足していた箇所にも新規テストを追加しました。
追加したテストの内容:
- Service層: FessAppServiceTestでベースサービス機能をテスト
- Storage関連: StorageItemTest、StorageTypeTestでストレージクラスをテスト
- Pagerクラス: 24個の新規Pagerテスト(GroupPager、RolePager、UserPager、SchedulerPager、PathMapPager、KeyMatchPager、ElevateWordPager、FailureUrlPager、JobLogPager、FileConfigPager、WebConfigPager、RelatedContentPager、RelatedQueryPager、RoleTypePager、SearchLogPager、WebAuthPager、FileAuthPager、ReqHeaderPager、SynonymPager、KuromojiPager、StopwordsPager、ProtwordsPager、StemmerOverridePager、LabelTypePager)
- Jobクラス: AllJobSchedulerTest、ScriptExecutorJobTestでジョブスケジューリングをテスト
これらの追加により、以下のカバレッジギャップを解消しました。
| 対象 | 移行前カバレッジ | 移行後 |
|---|---|---|
| Service層 | 0% | テスト追加 |
| Pagerクラス | 22.6% | 大幅に向上 |
| Storageクラス | 0% | テスト追加 |
| App Jobクラス | 0% | テスト追加 |
- PR #3011: test: add unit tests for improved test coverage
まとめ
4000以上のテストケースを持つFessのJUnit 5移行を完了しました。移行作業は主にアノテーションの置き換えとimport文の更新でしたが、テストクラスの数が多いため手間のかかる作業でした。また、移行を機にテストカバレッジも改善し、これまで手薄だった箇所にテストを追加しました。