書籍「テスト駆動開発」を写経するための環境構築

## はじめに

書籍「[テスト駆動開発(Kent Beck著,‎和田卓人訳)](https://www.amazon.co.jp/dp/B077D2L69C/)」を写経するために環境構築を行なったので、手順を残しておく。

## 構築の方針
- Eclipseを使う。
    - 書籍と同じ環境で進めたい。
    - JUnitがEclipseと連携する使い勝手を見たい。
- 細かい設定はしない。
    - とりあえず使えないと始まらない。あとからだんだん使えるようになるであろう。

## 環境
- MacBookPro(Late 2013) 
- macOS Sierra 10.12.3

## 手順 
### インストールと起動
[ここ](https://www.eclipse.org/downloads/eclipse-packages/)から、Eclipse IDE for Java Developersをダウンロードしてインストールする。
そして、アイコンを押して起動する。

<img width="210" alt="スクリーンショット 2017-12-17 18.32.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/58382b2c-b811-91b8-8a29-7f3bbd64c169.png">

起動すると下記が出るがここはなにもせず[Launch]でよい。

<img width="704" alt="スクリーンショット 2017-12-17 18.22.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/be344c50-3b4d-da13-6953-401c7980d0f6.png">

これで最初の画面が出てくる。

### プロジェクトの作成

起動後の画面で[Create a new Java project]を選ぶ。

<img width="1136" alt="スクリーンショット 2017-12-17 18.15.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/338403fe-125c-3573-e12c-f489f646dc6b.png">

プロジェクト名(`tdds`)を入力し、[Finish]。

<img width="1108" alt="スクリーンショット 2017-12-17 18.15.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/4a32f5db-a4e6-9f02-b925-c6c7ee759e23.png">

プロジェクトができた。

<img width="1136" alt="スクリーンショット 2017-12-17 18.22.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/0ed3d608-1a35-2e16-7d8c-4e432d741cde.png">

### JUnitの追加

JUnitライブラリを追加する。
プロジェクト(`tdds`)を右クリックして、[Properties]を選択。

<img width="1023" alt="スクリーンショット 2017-12-17 18.46.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/400e0fb1-8a87-986b-9a8d-26c7b77777d6.png">

[Java Build Path]を選び、[Libraries]、[Add Library..]を押す。

<img width="1108" alt="スクリーンショット 2017-12-17 18.16.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/1e11d78c-c81c-df34-9704-216c8f8f1e5e.png">

JUnitを選び、[Next]を押す。

<img width="1108" alt="スクリーンショット 2017-12-17 18.16.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/c368aaa8-5aba-88cb-19e5-5b672c63fd9b.png">

[Finish]を押す。

<img width="1108" alt="スクリーンショット 2017-12-17 18.16.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/e85e046c-0e30-cebc-f33a-559641fe634a.png">

これでJUnitが追加できた。

### `MoneyTest`クラスと`Dollar`クラスを追加

これで写経が始められる。早速、書籍P4〜P6に記載されている、`MoneyTest`クラスと`Dollar`クラスを追加してみる。

まず、`MoneyTest`クラスを追加する。
`src`を右クリックして[New]、[Class]と押す。

<img width="1026" alt="スクリーンショット 2017-12-17 19.00.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/9520a53b-cc8b-5c62-ddea-bdeb1d03a974.png">

Nameを`MoneyTest`と入力、[Finish]。

<img width="1108" alt="スクリーンショット 2017-12-17 18.24.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/3aeaa065-d3c9-bbf1-8a49-3d9f001ac469.png">

追加できた。

<img width="1136" alt="スクリーンショット 2017-12-17 18.24.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/a0de0ec9-12f1-b63d-751d-a88d2a8bf90f.png">

このままだと、パッケージ名が`tdds`になってしまっている。パッケージ名は書籍の通り、`money`に修正する。

パッケージ名を右クリック。[Refactor]、[Rename]と押す。

<img width="1043" alt="スクリーンショット 2017-12-17 18.24.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/a52a9124-7087-1e69-e405-4d8a2489b4b7.png">

New nameを`money`と入力し、[OK]を押す。

<img width="1108" alt="スクリーンショット 2017-12-17 18.25.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/79310967-5e27-b857-f6b2-637bfcf73537.png">

パッケージ名の変更が完了した。
続いて、`Dollar.java`も同様に作成する。

<img width="1108" alt="スクリーンショット 2017-12-17 18.25.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/ef064d72-0066-b58c-dd23-9959ad882d72.png">

作成した`MoneyTest.java`と`Dollar.java`には、書籍P4〜P6の通り、下記を実装しておく。

```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);
    }
}
```

```java:Dollar.java
package money;

class Dollar {
    int amount;

    Dollar(int amount) {

    }

    void times(int multiplier) {

    }
}
```

### テストの実行

プロジェクトを右クリック、[Run As]から[1 JUnit Test]を押すとテストが実行できる。

<img width="1025" alt="スクリーンショット 2017-12-17 18.26.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/9ee3751d-cb8e-8024-3c5f-5f2524c7789b.png">

このようにJUnitのテスト結果が出てくる。

<img width="1136" alt="スクリーンショット 2017-12-17 18.26.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/360da7b7-ac4b-1c78-5b12-66a174681e05.png">

ここを押すと、

<img width="1136" alt="スクリーンショット 2017-12-17 18.26.38のコピー.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/c0da295c-6051-30e0-8882-f2c09293d59e.png">

テスト結果がConsoleに出てくる。

<img width="1136" alt="スクリーンショット 2017-12-17 18.26.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/198108/ce02e68f-60d9-0e1c-f907-f9edd9257d20.png">

これは、`expected: <10> but was: <0> `、 つまり「アウトプットとして10が期待されているのに0だったよ」と言っている。

これで書籍にある最初のコードを動かすことができた。あとはこの調子で写経していけばよい。

## 備考

Androidアプリ開発の中ですでに設定済みだったためか、Javaは特にインストールする必要がなかった。もしかしたら他の環境では改めて設定の必要があるかもしれない。

## 参考にしたページ
- [ターミナルで始める「テスト駆動開発」写経のための環境構築](https://qiita.com/kasaharu/items/33a1386d661b222a32be)
- [MacにEclipseをインストールと日本語化](https://qiita.com/kyosuke5_20/items/988832ae339150e3dbcd)