Maven
IntelliJ
テスト駆動開発
junit5

IntelliJ IDEAとMavenで「テスト駆動開発」を写経するための環境構築

テスト駆動開発の本を購入しました!
写経やっていこうと思ったのですが、環境構築に結構手間取ったので、情報共有です

最初はビルドツールなしで、必要なライブラリだけ落としてきてシンプルにやろうとしたのですが、うまくいかなかったのでMavenを使いました

環境

  • macOS High Sierra(10.13.2)
  • Java8
  • JUnit5

上記の構成で写経できる環境を作っていきます

事前準備

IntelliJのインストール

公式サイトからインストーラー落として入れてください

IntelliJをインストールしたらMavenも一緒にインストールされると思います

JDKのインストール

ここから最新のjdkをダウンロードしてください

$ java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)

古いjava8だとテスト実行時に下のようなwarningメッセージが出る可能性がありますので
なるべく最新のバージョンを利用したほうが良いと思います(自分は1.8.0_121で実施していたら以下のwarningメッセージが出ました)

warning.log
objc[16282]: Class JavaLaunchHelper is implemented in both 
/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java and 
/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/libinstrument.dylib.
One of the two will be used. Which one is undefined.

手順

プロジェクト作成

IntelliJを起動して、Create New Projectを選択します。
左側のMavenを選択し
Project SDK1.8になっていることを確認しNextをクリックします。

Screen Shot 2017-12-26 at 15.44.08.png

Groupid,Artifactid,Versionなどを適当につけて
Nextをクリックしてください。

Screen Shot 2017-12-26 at 15.45.56.png

適当なプロジェクト名をつけてFinishをクリックしてください。

Screen Shot 2017-12-26 at 1.01.49.png

pom.xmlの編集

  • junit-jupiter-engine
  • junit-platform-launcher

上2つを追加してください

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>esaka</groupId>
    <artifactId>test_driven</artifactId>
    <version>1.0.1</version>

+    <dependencies>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.0.0-M5</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <version>1.0.0-M5</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>

</project>

注意として、versionは必ず5.0.0-M51.0.0-M5にしてください
2017/12/26時点では5.0.21.0.2が出ていますが
これらを使うとエラーが出ます (IntelliJだけ?)

pom.xmlを編集したら保存して、右クリック→MavenReimportでライブラリを取得してください

Screen Shot 2017-12-26 at 15.56.05.png

成功したら左のプロジェクトツリー→External Librariesにいくつかライブラリが追加されるはずです

テストクラス作成

ライブラリの準備もできましたので実際にコードを書いて行きましょう

本4~7Pに記載されている最初のコードを書きます

まずsrcmainjavaで右クリックをし、NewPackage
moneyというパッケージを作成してください

Screen Shot 2017-12-26 at 15.58.49.png

続いて、今作ったmoneyで右クリックをし、NewJava Classとし
Dollar.javaという名前のクラスファイルを作成してください

Dollar.java
package money;

class Dollar {
    int amount;
    Dollar(int amount) {
    }
    void times(int multiplier) {
    }
}

次にテスト用のパッケージを作成します
srctestjavaで右クリックをし、 NewPackage
moneyというパッケージを作成してください

Screen Shot 2017-12-26 at 16.00.55.png

そして、テスト用のmoneyパッケージで右クリックをし、NewJava Class
MoneyTest.javaという名前のクラスファイルを作成してください

MoneyTest.java
package money;

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

public class MoneyTest {
    @Test
    public void testMultiplication() {
        Dollar five = new Dollar(5);
        five.times(2);
        assertEquals(10, five.amount);
    }
}

テスト実行

準備できたので、テストを実施しましょう

MoneyTest.javaを開いて、エディタ上で右クリック→Run 'MoneyTest'をクリックしてください

Screen Shot 2017-12-26 at 16.04.51.png

このテストは失敗するためレッドバーが表示されるはずです

Screen Shot 2017-12-26 at 16.06.18.png

では本に書かれている通りDollarクラスを修正しましょう

package money;

class Dollar {
-    int amount;
+    int amount=10;
    Dollar(int amount) {
    }
    void times(int multiplier) {
    }
}

修正後、もう一度テストを実行してみてください

Screen Shot 2017-12-26 at 16.10.14.png

今度はテストをパスしてグリーンバーになりました

とりあえずこの環境で1章の終わりまでやりましたが、特に問題は出ていないです
参考になればと思います

参考ページ

環境構築で参考にしたページ

バグの解決で参考にしたページ