BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JUnit 5リリース

JUnit 5リリース

原文(投稿日:2017/10/24)へのリンク

JUnit 5がリリースされた。2006年にリリースされたJUnit 4以来のメジャーリリースだ。ユーザーガイドによると、JUnit 5の主たる目標の一つは、JUnitの今後の機能強化と進化を容易にすることにある。

JUnit 4では、もともと内部構造としてのみ追加された多くのものが、外部拡張作者とツール作者によって使われていました。そのため、JUnit 4の変更は極めて難しく、時には不可能になっていました。

JUnit 5チームは、テスティングフレームワークを再設計し、2つの領域に分割することで、この問題を解決した。

  1. テストを書くためのAPIセット
  2. テストを発見、フィルター、実行するために、ツール作者が使える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のServiceLoaderメカニズムで自動的に登録することもできる。

@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

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT