こんにちは。
キャスレーコンサルティングLS(リーディング・サービス)部の梅津です。

今回より、「JUnitのアサーションライブラリAssertJ」をテーマに、三回に分けてご紹介いたします。

第一回目は、「AssertJを使うための環境構築手順」についてです。
※AssertJの詳細につきましては、次回のブログにてご紹介予定です。

JDK8とApach Mavenのインストール

まずは、JDKとApache Mavenのインストールを行います。
使用OSは、Windowsです。

JDK8

下記より、必要なファイルをダウンロードします。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
※この記事では、「jdk-8u171-windows-x64.exe」をダウンロードしました。

ダウンロードしたファイルを実行し、インストールを開始します。
オプション機能についてや、インストール先の指定などを設定する画面が表示されますが、
基本的にはデフォルトのまま、「次へ」を選択して問題ありませんので、インストール完了画面まで進めましょう。

環境変数の設定

インストールが完了したら、続いて環境変数を設定します。
「コントロールパネル」>「システムとセキュリティ」>「システム」>「システムの詳細設定」>「環境変数」
と遷移してください。

<JAVA_HOMEの作成>
「新規」ボタンを押して、以下のように入力します。

  • 変数名   JAVA_HOME
  • 変数値   JDKのインストール先のパス

※インストールの際に、デフォルトのまま「次へ」を指定した場合は、
「C:\Program Files\Java\jre1.8.0_171」となります。
※「\jre1.8.0_171」の部分は、ダウンロードしたJDKのファイルによって変わります。

<pathへの追加>
変数名「path」を選び、「編集」を選択します。pathの最後に以下の内容を、追加します。

  • %JAVA_HOME%\bin;

※Windows10を使っている場合は、「C:\Program Files (x86)\Common Files\Oracle\Java\javapath」と
自動で設定されるため、pathへの追加は必要ありません。

<確認>
コマンドプロンプトにて、「java -version」を実行し、
以下のようにバージョンが確認できれば、JDKのインストールは完了です。

C:\>java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

バージョンが表示されない場合は、環境変数の設定が上手く出来ていません。
pathの最後の「;」が抜けていないか、JAVA_HOME の設定値と実際のインストール先が間違っていないか
などを確認しましょう。

Apach Mavenのインストール

下記より、必要なファイルをダウンロードします。
https://maven.apache.org/download.cgi
※この記事では、「apache-maven-3.5.3-bin.zip」をダウンロードしました。

ダウンロードしたファイルを、任意の場所に展開します。

環境変数の設定

展開後、JDKと同様に環境変数を設定してください。
<M2_HOMEの作成>

  • 変数名   M2_HOME
  • 変数値   zipを展開した先のパス

※この記事では、「C:\apache-maven-3.5.3」に展開しています。

<pathへの追加>
pathの最後に、以下を追加します。

  • %M2_HOME%\bin;

<確認>
コマンドプロンプトにて「mvn -v」を実行して、以下のようにバージョンが確認できれば、
mavenのインストールは完了です。

C:\>mvn -v
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T04:49:05+09:00)
Maven home: C:\apache-maven-3.5.3\bin\..
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jre1.8.0_17
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

Eclipseのダウンロード

下記より、必要なファイルをダウンロードします。
http://mergedoc.osdn.jp/
※この記事では、「Eclipse 4.7 Oxygen」を選択し、
遷移先画面で「java Windows64bit Full Edition」をダウンロードしました。

ダウンロード完了後、エクスプローラーにて、zipファイルの展開を行います。
解凍時にパスが長すぎて、エラーになる場合があるため、C直下に展開しましょう。
「C:\pleiades\eclipse」配下にある、「eclipse」または「eclipse.exe」を実行し、起動すれば完了です。

今回は、Pleiades All in Oneをダウンロードしているため、
Eclipseの日本語化とQuick JUnitが、既に準備されている状態となります。

空のMavenプロジェクトの作成

続いて、ソースコードを作成するためのプロジェクトを、作成します。

①起動しているEclipseにて、「ファイル」>「新規」>「Mavenプロジェクト」を選択する。
②新しく「新規Mavenプロジェクト」画面が表示されるため、「次へ」を押下する。
③アーキタイプ設定画面が表示されるため、「maven-archetype-quickstart」を選択し「次へ」を押下する。
④グループIDとアーティファクトIDに任意のIDを設定し、「完了」を選択する。

今回は、「グループID:com/アーティファクトID:example」とします。
すると、パッケージ・エクスプローラーに先ほど指定した、アーティファクトIDの名前で
パッケージが作成されているはずです。

JUnit4とAssertJの設定

Mavenのセントラルリポジトリから、JUnitとAssertJの情報を検索し、
pom.xmlの/projectの直前に、下記内容を追記します。

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>3.9.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

※maven-archetype-quickstartを選択したことによって、junitの3.8.1が既に記載されていると思います。
junitの部分は、versionを書き換えるだけで問題ありません。

リポジトリについて

リポジトリとは、pomで指定している各ライブラリを保存している場所であり、
「リモートリポジトリ」と「ローカルリポジトリ」に分けられます。

各ライブラリは、にgroupId,artifactId,versionを指定することによって
Mavenがダウンロードし、その機能を利用できる状態にしてくれます。

<リモートリポジトリ>
リモートリポジトリは、ネットワーク上で公開されたリポジトリであり、
そこにアクセスすることで、ライブラリを使うことができます。

pom.xmlのに、id,name,urlを指定することで、
そのリポジトリが、利用可能になるのです。

また、セントラルリポジトリは、リモートリポジトリの一つですが、
にて、リポジトリの情報を記載しなくても、利用することができます。

<ローカルリポジトリ>
ローカルリポジトリは、Mavenによってローカル環境に作られたリポジトリです。
ここにインストールされたライブラリは、セントラルリポジトリと同じように利用することができ、
リポジトリ自体は「C:\Users\user\.m2\repository」に作られます。

今回使用する、JUnit4とAssertJのライブラリは、セントラルリポジトリに存在したため、
pom.xmlにリポジトリの情報を、書く必要がありませんでした。
もしも、セントラルリポジトリに存在しないライブラリを使いたい場合は、
そのリポジトリ情報を書く必要があるので、注意してください。

サンプルプログラムとテストコードの作成

空のプロジェクトを作成した際に、src/main/java/com/exampleの下に「App.java」が生成されているので、
このクラスを使います。

下記のような、サンプルコードを書きました。

App.java

package com.example;

public class App {
  public static String getHello() {
    String hello = "Hello World!";
    return hello;
  }
}

次に、テストコードを作成します。

サンプルコードの準備が出来たら、「public class App{」のAppの部分にカーソルを合わせて、
「ctrl + 9」を押します。

すると、「テスティングペアがありません。作成しますか?」と表示されるので、「はい」を選択しましょう。
「新規JUnitテスト・ケース」画面が表示されるので、「新規JUnit4テスト」にチェックを入れ
その他はデフォルトのまま、「次へ」を押します。

「使用可能なメソッド(M)」でサンプルコードに記載した、「getHello()」メソッドを選択し、「完了」を押します。

ここまで行うと、src/test/java/com.exampleの下に「AppTest.java」が作成されます。
今回は作成されたクラスに、下記のようなテストコードを書きました。

AppTest.java

package com.example;

import static org.assertj.core.api.Assertions.*;

import org.junit.Test;

public class AppTest {
  @Test
  public void testGetHello() {
    assertThat(App.getHello()).isEqualTo("Hello World!");
  }
}

pom.xmlの内容が反映されていなかったり、どこもおかしくないのにエラーになる箇所がある等が発生した場合は、
以下のように、対応してください。

「パッケージ・エクスプローラー」で、プロジェクト(この記事ではhello-world)を右クリックし、
「Maven(M)」>「プロジェクトの更新」を選択。

Quick JUnitの活用

Quick JUnitには以下のような、機能(ショートカット)があり、テストの作業効率を上げることができます。

・Ctrl + 9
実装クラスと対応するテストクラスの、タブの切り替え。
今回だと、App.javaのタブでCtrl + 9 を押すと、AppTest.javaに表示タブが切り替わります。
また、テストクラスが存在しない場合は、クラスの新規作成も行えます(先ほどは、これを使いました)。

・Ctrl + 0
カーソルがある個所のメソッドテストを、実行します。

Ctrl + 0 で、サンプルコードのテストが正常に動作するか、
またQuick JUnitが機能しているか、確認をしましょう。

Eclipse上でmvn testを実行する。

コマンドの実行前に、次のことを確認してください。
「プロジェクト(P)」>「プロパティー(P)」>「Javaのビルド・パス」>「ライブラリー(L)」に進み、
「ビルド・パス上のJARおよびクラス・フォルダー(T)」の中に、JUnitが設定されているか確認。

されていない場合は、右側から「ライブラリーの追加(I)」を選択し、表示される画面にて「JUnit4」を設定する。
設定が完了したら、「パッケージ・エクスプローラー」でプロジェクトを右クリックし、
「実行」>「Maven test」を実行する。

実行後、以下のように「BUILD SUCCESS」と表示が出たら、テストが通ったことになり、
インストールしたJUnit4が、動いていることが分かります。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hello-world 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-world ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\pleiades\workspace\hello-world\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello-world ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello-world ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\pleiades\workspace\hello-world\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello-world ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello-world ---
[INFO] Surefire report directory: C:\pleiades\workspace\hello-world\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running <span style="text-decoration: underline;">maven.test.hello_world.AppTest</span>
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.062 sec
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.098 s
[INFO] Finished at: 2018-04-25T19:10:05+09:00
[INFO] Final Memory: 10M/193M
[INFO] ------------------------------------------------------------------------

環境構築は、以上になります。

まとめ

今回は、「JUnitとセットで使うライブラリ」の第一弾として、
AssertJを利用するための、環境構築手順を紹介しました。
エンジニア歴の長い方にとっては、既知の内容かもしれませんが、少しでも多くの方の役に立てれば幸いです。

次回は、AssertJの詳細についての記事になりますが、
私自身AssertJを使用したことがないため、次回の内容がとても楽しみです。

最後までご一読いただきありがとうございました。