ターミナルで始める「テスト駆動開発」写経のための環境構築


Classi Advent Calendar 2017 13 日目の記事です。
フロントエンドエンジニアの @kasaharu です。 12 日ぶり 2 回目の投稿です。

最近社内で「テスト駆動開発」の読書会を始めました。(まだ 1 回だけですが…)
事前にこの本は写経向きと聞いていたので、写経する前提で始めました。

その際に、一つ大きな問題がありました。
そう、何を隠そう、ボクの Mac 上に Java が動く環境がないのです!
とは言え、写経のために IDE を入れたくないという葛藤…

というわけで、今日のテーマはターミナルで始める「テスト駆動開発」写経のための環境構築です!

Java を入れる

$ brew tap caskroom/cask
$ brew cask install java
$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
  • 特に気にすることなく Java 9 が入りました

JUnit を入れる

  • 下記から jar ファイルのダウンロードします(正直どこから取ってきたらよいか迷いました)
    • http://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-api/5.0.2/
      • 正直どこから取ってきたらよいか迷いました…
        • 最初のつまずきポイントでした
      • GitHub を見てたらそれっぽいのがあってたどり着いた感じです
    • junit-jupiter-api-5.0.2.jar をダウンロード
      • これを選択したのは、最初のテストコードが org.junit.jupiter.api.* をインポートしてたからです
  • 任意の場所に配置します
    • 例) $HOME/sukina/basyo/junit-jupiter-api-5.0.2.jar
  • CLASSPATH を設定します
bash_profile
export CLASSPATH=$HOME/sukina/basyo/junit-jupiter-api-5.0.2.jar
  • あとはターミナルを再起動すれば OK です

1 章のコードを実行してみる

  • テストコードと実装コードはそれぞれ下記の通り
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);
  }
}
Dollar.java
package money;

class Dollar {
  int amount;

  Dollar(int amount) {
  }

  void times(int multiplier) {
  }
}
  • 実行
    • 警告は出るが(2 つ目のつまずき)動作は確認できました
$ javac Dollar.java MoneyTest.java
警告:不明な列挙型定数ですStatus.STABLE
  理由: org.apiguardian.api.API$Statusのクラス・ファイルが見つかりません
警告:不明な列挙型定数ですStatus.STABLE
警告2個
  • ただ警告が出たままでは気になるので消しに行きます
    • 「org.apiguardian.api.API$Statusのクラス・ファイルがない」と言われているので下記のファイルを用意します
$ javac Dollar.java MoneyTest.java
(消えたっ!)
  • (書籍の流れと逆走するが) Dollar.java の amount フィールドの実装を消すとちゃんと期待したところでエラーが出ます
$ javac Dollar.java MoneyTest.java
MoneyTest.java:11: エラー: シンボルを見つけられません
    assertEquals(10, five.amount);
                         ^
  シンボル:   変数 amount
  場所: タイプDollarの変数 five
エラー1個

まとめ

と、言うわけで IDE を用意せず写経する準備ができました。
張り切って読書会をしていこうと思います!

明日は @spin13 さんです!乞うご期待!