• 2019年5月19日日曜日
アリスト戦記
アリスト戦記 https://blog.aristo-solutions.net/2019/05/junit5.html

最新鋭ユニットテストフレームワーク「JUnit5」~インストール編~

ユニットテストによる再帰的テストの重要性が説かれるようになって久しい。

今更それについて記事を書こうなどとは10年遅いと断ずるのもやむなしなのだが、それでも敢えて再び僕がユニットテストに着眼する気になったのには理由がある。

現場の成熟度の問題

お恥ずかしながら、だが、僕はユニットテストを成功させたプロジェクトの経験など一度も無いわ。

残念ながら現場の現実的問題として、製造チームは開発本系の製造のおぼつかないような人員が多く、ユニットテストまで見識を備えた要員を集めるなど全く遠い。

ユニットテストを行う為にはユニットテストを行う為に都合の良い設計というものがあって、最初から理解している人間が設計を担当しないと満足にユニットテストを書けなくなってしまうからだ。

この現場の事情を鑑みると、ユニットテスト有識者はまだまだ不足……と言うか全然いない状況にあると僕は考えている。

そして僕はその需要に目を付け、この分野に注力することで技術者として身を立てようと考えているわけだ。

JUnitの歴史

ユニットテストにも色々あるが、手始めはJUnit5としよう。
JUnitはJavaのユニットテストフレームワークである。

JUnitには長い歴史がある。

調べたところ、JUnitは1997年に第一弾が世に出たらしい。
しかし、そんな古の時代の事を知っている人間なんぞ、もうこの世におらんのではないか?

現実的にJUnitが世に広まったのはJUnit3からでしょう。

JUnit3

JUnit3はJUnitがJavaのユニットテストのデファクトスタンダードの地位を固めたレジェンド世代だ。

Java1.4に準拠したライブラリである。
2007年から社会人デビューした僕にとっては新人の時代だ。

今やもう昔の時代なのだが、当時のJavaにはアノテーションってものが無くてな。
クラスの継承のみで全てをやってのけるフレームワークだった。

これはプログラミングの基本で、基本に忠実に作られたライブラリだった。

ちなみにSpringプロジェクトとか作ると、最初は勝手にJunit3モードになっている。
昔の名残りなんだろうな。

JUnit4

その後、Java5の時代がやってくる。

Java1.4→Java5は非常に大きな進化があった。それがアノテーションだ。

アノテーションとは、クラスやメソッド、変数にメタ情報を付与することで、特定の処理を行うための目印にすることが出来る機能だ。

これはJUnitのようなメタ挙動をするフレームワークには非常に相性が良く、継承という制約から解き放たれることが可能になった。
この対応を行ったバージョンがJUnit4だ。

Java5以降とJUnit4。

この組み合わせがJavaの黄金時代を築き上げた。
2019年現在、JUnitと言えばJUnit4の話をしているのが通常である。

しかし、時代は進んでいるもので、新たな時代が既に到来している。

JUnit5

更に時代は進み、Java8。
Java8では遂にJavaにもラムダ式が導入され、ラムダ式を有効活用した最新鋭フレームワーク「JUnit5」も生み出された。

しかし、まだ大多数のプログラマーは時代の変化に対応出来ていないと思う。
JREはJava8だけど、使っている機能はJava7以前だけで完結しているプロジェクトも散見されるからな。
従って引き続き何の理由も無くJUnit4が使われ続けていることが多い。

確かに、僕もラムダ式ってのはどうも慣れない。
しかし、ラムダ式には使いどころってものがあって、JUnitには非常に相性が良いものなんだ。

今は普及が少なくとも、数年後には必ず、JUnit5が標準に移り変わるだろう。
その時に備えて、先手を打ってJUnit5を覚えておくのが、本連載の趣旨だ。

まあ、JUnit4以前を知っていれば、JUnit5も対して難しい問題じゃない。
気軽に行くぜ。

mavenのインストール

では、パッパと始めていくか。
JUnit 5 ユーザーガイドを基本にネットの情報も参考にしながら進める。

JUnit5はmavanのpom.xmlにその記述を追加することでインストール出来る。

maven設定

pom.xmlに以下を追記する。

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.4.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.4.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>


junit.jupiterだぁ?
水、金、地、火、木で5番目ってことなんだろうが、恰好付けやがって!!

導入するのは、「junit-jupiter-api」「junit-jupiter-engine」の2つだ。

「junit-jupiter-api」は、ユニットテストコードを記述する為に必要なクラスやメソッド、アノテーションなどである。

「junit-jupiter-engine」は、ユニットテストを実行する為のライブラリだ。ユニットテストはカバレッジとかもある特殊なものだから、エンジンを経由しなければ実行出来ないわけよ。

JUnit5の実装

では、さっそくどんな風に書けるか試していこう。
参考にするのは、JUnit 5 ユーザーガイド

最近はこういった公式マニュアルも親切になったから、これだけ見れば十分って面もあるんだけど、まあ、僕もとりあえず自分で検証したものを記事にするぜ。

実装ソースはこうだ。

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

public class JUnit5Test {

   @Test
   void myFirstTest() {
      assertEquals(2, 1 + 1);
   }

}


何てことは無い。
基本はJUnit4時代から変化無しだ。

しかし、JUnit5を使うことで、以前よりも少ないステップでテストコードを書けるようになっているから、これをこれから検証していこう。

0 件のコメント:

コメントを投稿