[Zend Framework] Zend_Test: PHPUnit を動かしてみる

いろいろと分からないことが多いので、とりあえず動かしてみるところまでやってみることにしました。

[markdown]

> * [MVCフレームワークで単体テストを実施する – Zend_Test – (1/3):CodeZine](http://codezine.jp/article/detail/5786)
> * [テスト記述の詳細 – Zend_Testのメソッド – (1/3):CodeZine](http://codezine.jp/article/detail/5851)
>
> Zend_TestコンポーネントはPHPUnitと呼ばれる単体テストフレームワークの上に構築されています。例えば、テストを具体的に記述するためのクラスであるZend_Test_PHPUnit_ControllerTestCaseは、PHPUnitのクラスであるPHPUnit_Framework_TestCaseを継承したものになっています。

## PHPUnit をインストールする

> * [第3章 PHPUnit のインストール](http://phpunit.de/manual/3.7/ja/installation.html#installation.pear)
> * [Packagist](https://packagist.org/packages/phpunit/)

システム全体で使うためには、グローバルパスを通す必要があるとのこと。
いままでPEARで用意されていた経緯から、ネット上の情報やPHP, Zendまわりの環境設定もPEARで入れておいた方がつまづかなさそうです。

が、手っ取り早く試したいこと、今後のことを考えて Composer で入れました。

> * [Composer – インストール | deadwood](https://www.d-wood.com/blog/2013/06/16_4017.html)

## ZFコマンドで作成されているファイルを確認する

今までの経験から、ZFコマンドでプロジェクトを作成すると雛形が作成されているので、今回も確認します。

“`
./tests
├── application
│   └── controllers
│   └── IndexControllerTest.php
├── bootstrap.php
├── library
└── phpunit.xml
3 directories, 3 files
“`

下記を雛形にすることになりそうです。

“`php:tests/application/controllers/IndexControllerTest.php
bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . ‘/configs/application.ini’);
parent::setUp();
}
}
“`

「[テスト環境の構築](http://codezine.jp/article/detail/5786?p=3)」は、このままで大丈夫そうです。

“`php:tests/bootstrap.php

./application


./library




“`

なお、「[出力のための修正](http://codezine.jp/article/detail/5786?p=2)」としてエラーコントローラのコード修正に関して触れられていたのですが、ひとまず変更せずにそのままにしました。

## テストコードを書いて動かしてみる

まだ書き方が分からないので、Indexコントローラのindexアクションの表示テストになると思われるコードだけ用意して動かしてみます。

“`php:tests/application/controllers/IndexControllerTest.php
bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . ‘/configs/application.ini’);
parent::setUp();
}
public function testIndexAction() {
$this->dispatch(‘/’);
$this->assertController(‘index’);
$this->assertAction(‘index’);
}
}
“`

プロジェクトディレクトリの tests 以下で、下記を実行します。

“`
% phpunit application/controllers/IndexControllerTest.php
PHPUnit 3.7.22 by Sebastian Bergmann.
Configuration read from /Users/***/projects/sample/tests/phpunit.xml
.
Time: 0 seconds, Memory: 6.25Mb
OK (1 test, 2 assertions)
“`

成功しました。
存在しないアクションを指定すると下記のようなエラーになりました。

“`
% phpunit application/controllers/IndexControllerTest.php
PHPUnit 3.7.22 by Sebastian Bergmann.
Configuration read from /Users/***/projects/sample/tests/phpunit.xml
F
Time: 0 seconds, Memory: 6.50Mb
There was 1 failure:
1) IndexControllerTest::testIndexAction
Failed asserting last action used <"index"> was “foobar”
/usr/local/zend/share/ZendFramework/library/Zend/Test/PHPUnit/ControllerTestCase.php:1041
/Users/***/projects/sample/tests/application/controllers/IndexControllerTest.php:15
FAILURES!
Tests: 1, Assertions: 2, Failures: 1.
“`

[/markdown]