No.2 新卒未経験エンジニアがComposerでPHPUnitをインストールしてユニットテストを試してみた〜PHPUnitインストール編〜

## プロローグ
「ユニットテスト」というものをやったことがなかったので、自分で試してみようと思いました。
調べてみるとどうやら各言語ごとにユニットテスト用のツールがあると分かり、僕はPHPしか使ったことないのでPHPでのユニットテスト用のツール「PHPUnit」を試すことにしました。

## ユニットテストとは
コンピュータプログラミングにおいて単体テスト（たんたいテスト）あるいはユニットテストとは、ソースコードの個々のユニット、すなわち、1つ以上のコンピュータプログラムモジュールが使用に適しているかどうかを決定するために、関連する制御データ、使用手順、操作手順とともにテストする手法である。
（引用：Wikipedia）

## 環境
・mac OS X El Capitan バージョン 10.11.6
・PHP 5.6.30

## PHPUnitのインストール
まずはこちらのサイトを参考にPHPUnitのインストールしていきました。
http://www.atmarkit.co.jp/ait/articles/0911/12/news105.html

```text:ターミナル
pear channel-discover pear.phpunit.de
```
すると

```text:ターミナル
pear: command not found
```
と怒られる。
じゃあpearをインストールしようと思い、以下のサイトを参考にインストール！
https://qiita.com/katsukii/items/1f343edc5eb7f9aa1a0b

```text:ターミナル
sudo php /usr/lib/php/install-pear-nozlib.phar
sudo cp /etc/php.ini.default /etc/php.ini
```
php.iniのinclude_pathを

```text:ターミナル
include_path = ".:/php/includes"
```
から

```text:ターミナル
include_path = ".:/usr/lib/php/pear"
```
に変更！

```text:ターミナル
sudo pear list
```
で確認や！！

```text:ターミナル
sudo: pear: command not found
```
ちーん。。。。orz
なんでやぁッァアああああ！！
調べてみたけどイマイチ原因も分からず、他の方法を模索していたところComposerでもPHPUnitをインストール出来るという情報が！
早速以下のサイトを参考に進めていきました！
http://www.elp.co.jp/staffblog/?p=5890
まずはテキトーなディレクトリを作り、そこに移動してcomposer.jsonファイルを作成。

```text:ターミナル
mkdir develop
cd develop/
touch composer.json
```
そしてcomposer.jsonに以下を記述。

```composer.json
{
    "require-dev": {
        "phpunit/phpunit": "*"
    }
}
```
その後composerをアップデートして無事完了！

```text:ターミナル
composer update
```
試しに

```text:ターミナル
phpunit -v
```
と打つと

```text:ターミナル
PHPUnit 5.7.22 by Sebastian Bergmann and contributors.

Usage: phpunit [options] UnitTest [UnitTest.php]
       phpunit [options] <directory>

Code Coverage Options:

  --coverage-clover <file>  Generate code coverage report in Clover XML format.
  --coverage-crap4j <file>  Generate code coverage report in Crap4J XML format.
  --coverage-html <dir>     Generate code coverage report in HTML format.
  --coverage-php <file>     Export PHP_CodeCoverage object to file.
  --coverage-text=<file>    Generate code coverage report in text format.
                            Default: Standard output.
  --coverage-xml <dir>      Generate code coverage report in PHPUnit XML format.
  --whitelist <dir>         Whitelist <dir> for code coverage analysis.
  --disable-coverage-ignore Disable annotations for ignoring code coverage.

Logging Options:

  --log-junit <file>        Log test execution in JUnit XML format to file.
  --log-teamcity <file>     Log test execution in TeamCity format to file.
  --testdox-html <file>     Write agile documentation in HTML format to file.
  --testdox-text <file>     Write agile documentation in Text format to file.
  --testdox-xml <file>      Write agile documentation in XML format to file.
  --reverse-list            Print defects in reverse order

Test Selection Options:

  --filter <pattern>        Filter which tests to run.
  --testsuite <name>        Filter which testsuite to run.
  --group ...               Only runs tests from the specified group(s).
  --exclude-group ...       Exclude tests from the specified group(s).
  --list-groups             List available test groups.
  --list-suites             List available test suites.
  --test-suffix ...         Only search for test in files with specified
                            suffix(es). Default: Test.php,.phpt

Test Execution Options:

  --report-useless-tests    Be strict about tests that do not test anything.
  --strict-coverage         Be strict about @covers annotation usage.
  --strict-global-state     Be strict about changes to global state
  --disallow-test-output    Be strict about output during tests.
  --disallow-resource-usage Be strict about resource usage during small tests.
  --enforce-time-limit      Enforce time limit based on test size.
  --disallow-todo-tests     Disallow @todo-annotated tests.

  --process-isolation       Run each test in a separate PHP process.
  --no-globals-backup       Do not backup and restore $GLOBALS for each test.
  --static-backup           Backup and restore static attributes for each test.

  --colors=<flag>           Use colors in output ("never", "auto" or "always").
  --columns <n>             Number of columns to use for progress output.
  --columns max             Use maximum number of columns for progress output.
  --stderr                  Write to STDERR instead of STDOUT.
  --stop-on-error           Stop execution upon first error.
  --stop-on-failure         Stop execution upon first error or failure.
  --stop-on-warning         Stop execution upon first warning.
  --stop-on-risky           Stop execution upon first risky test.
  --stop-on-skipped         Stop execution upon first skipped test.
  --stop-on-incomplete      Stop execution upon first incomplete test.
  --fail-on-warning         Treat tests with warnings as failures.
  --fail-on-risky           Treat risky tests as failures.
  -v|--verbose              Output more verbose information.
  --debug                   Display debugging information during test execution.

  --loader <loader>         TestSuiteLoader implementation to use.
  --repeat <times>          Runs the test(s) repeatedly.
  --teamcity                Report test execution progress in TeamCity format.
  --testdox                 Report test execution progress in TestDox format.
  --testdox-group           Only include tests from the specified group(s).
  --testdox-exclude-group   Exclude tests from the specified group(s).
  --printer <printer>       TestListener implementation to use.

Configuration Options:

  --bootstrap <file>        A "bootstrap" PHP file that is run before the tests.
  -c|--configuration <file> Read configuration from XML file.
  --no-configuration        Ignore default configuration file (phpunit.xml).
  --no-coverage             Ignore code coverage configuration.
  --no-extensions           Do not load PHPUnit extensions.
  --include-path <path(s)>  Prepend PHP's include_path with given path(s).
  -d key[=value]            Sets a php.ini value.
  --generate-configuration  Generate configuration file with suggested settings.

Miscellaneous Options:

  -h|--help                 Prints this usage information.
  --version                 Prints the version and exits.
　　　　--atleast-version <min>   Checks that version is greater than min and exits.
```
長かった。。。
予想外に記事が長すぎてしまったので次回、ユニットテスト実践編を書いていきます！