JUnit 5がリリースされた。2006年にリリースされたJUnit 4以来のメジャーリリースだ。ユーザーガイドによると、JUnit 5の主たる目標の一つは、JUnitの今後の機能強化と進化を容易にすることにある。
JUnit 4では、もともと内部構造としてのみ追加された多くのものが、外部拡張作者とツール作者によって使われていました。そのため、JUnit 4の変更は極めて難しく、時には不可能になっていました。
JUnit 5チームは、テスティングフレームワークを再設計し、2つの領域に分割することで、この問題を解決した。
- テストを書くためのAPIセット
- テストを発見、フィルター、実行するために、ツール作者が使えるJUnit Platform Launcher API
JUnit 5は、JUnit Jupiter、JUnit Platform、JUnit Vintage (後方互換性のため)という、3つのサブプロジェクトの集合になっている。
JUnit Jupiter は、テストと拡張を書くためのAPIを提供する。@Test
のようなJUnit 4でおなじみのアノテーションと、@DisplayName
のような新しいアノテーションを含んでいる。一部のアノテーションはリネームされている。
JUnit 5 | JUnit 4 |
---|---|
@BeforeEach |
@Before |
@AfterEach |
@After |
@BeforeAll |
@BeforeClass |
@AfterAll |
@AfterClass |
@Disabled |
@Ignore |
JUnit 5で使えるアノテーションの一覧については、ユーザーガイドを参照してほしい。
JUnit 5には、Java 8のLambdaでうまく機能するassertAll
のような新しいアサーションが含まれている。
public class SampleTest {
@Test
void groupedAssertions() {
// In a grouped assertion all assertions are executed, and any
// failures will be reported together.
assertAll("person",
() -> assertEquals("John", person.getFirstName()),
() -> assertEquals("Doe", person.getLastName())
);
}
}
JUnit 5では、ネストされたテストという概念も導入された。これを使うことで、開発者は関連のあるテストをまとめることができる。
JUnit 5の拡張モデルは、JUnit 4のRunner
、@Rule
、@ClassRule
という拡張ポイントを、単一のExtension
APIに置き換える。拡張は、@ExtendWith
を使って明示的に登録することもできるし、Javaの
@ExtendWith(MockitoExtension.class)
@Test
void mockTest() {
// ...
}
JUnit Platformはテストの発見、フィルタリング、実行のための基盤を提供する。
ユーザーガイドによると、
JUnit 5の重要な目標の一つは、JUnitとそのクライアントプログラム – ビルドツールやIDE – とのインターフェイスを、もっと強力に、安定したものにすることです。狙いは、外部から必要とされる全てのフィルタリングおよび設定と、テストの発見と実行の内部とを切り離すことにあります。
これはJUnitのLauncher
APIによって実現された。このAPIは通常、IDEとビルドツールがテストプランを設定して起動するために利用する。カスタムのTestEngine
を与えることで、サードパーティのテストライブラリもJUnit Platformの起動にプラグインできる。
コマンドラインJavaアプリケーションConsoleLauncherを使うことで、開発者はJUnit Platformをコンソールから起動することができる。
JUnit Vintage は、JUnit 3やJUnit 4で書かれたテストを新しいプラットフォームで実行可能にするためのテストエンジンだ。開発者はテストのランタイムパスにjunit-vintage-engine
を含める必要がある。そうすることで、JUnit Platform Launcherはレガシーなテストを自動的にピックアップする。
今回のリリースは、ランタイムとしてJava 8(またはそれ以上)を必要とする。このことは、主要なライブラリの最新版がJava 8を最小バージョン要件だとみなしている、というトレンドを明確に示している。
JUnit 5は、EPL v2.0ライセンスでリリースされる最初のプロジェクトの一つだ。
Rate this Article
- Editor Review
- Chief Editor Action