Contents
- UNIX
- Windows
- サーバ
- プログラミング言語
- データベース
- プロトコル
- サービス
- オープンソース
- 規格・技術
- アプリケーション
- PC
- DEVICE
- その他(未分類)
お問合せ: メールフォーム
今回は、pear コマンドで PHPUnit をインストールします。
% sudo pear channel-discover pear.phpunit.de Adding Channel "pear.phpunit.de" succeeded Discovery of channel "pear.phpunit.de" succeeded
% sudo pear install phpunit/PHPUnit Unknown remote channel: pear.symfony-project.com Did not download optional dependencies: phpunit/PHP_Invoker, use --alldeps to download automatically phpunit/PHPUnit requires package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2) phpunit/PHPUnit requires PHP extension "dom" phpunit/PHPUnit can optionally use package "phpunit/PHP_Invoker" (version >= 1.1.0) phpunit/PHP_CodeCoverage can optionally use PHP extension "dom" phpunit/PHP_CodeCoverage can optionally use PHP extension "xdebug" (version >= 2.0.5) phpunit/PHPUnit_MockObject can optionally use PHP extension "soap" downloading File_Iterator-1.3.1.tgz ... Starting to download File_Iterator-1.3.1.tgz (5,157 bytes) .....done: 5,157 bytes downloading Text_Template-1.1.1.tgz ... Starting to download Text_Template-1.1.1.tgz (3,622 bytes) ...done: 3,622 bytes downloading PHP_CodeCoverage-1.1.2.tgz ... Starting to download PHP_CodeCoverage-1.1.2.tgz (132,552 bytes) ...done: 132,552 bytes downloading PHP_Timer-1.0.2.tgz ... Starting to download PHP_Timer-1.0.2.tgz (3,686 bytes) ...done: 3,686 bytes downloading PHPUnit_MockObject-1.1.1.tgz ... Starting to download PHPUnit_MockObject-1.1.1.tgz (19,897 bytes) ...done: 19,897 bytes downloading PHP_TokenStream-1.1.3.tgz ... Starting to download PHP_TokenStream-1.1.3.tgz (9,860 bytes) ...done: 9,860 bytes install ok: channel://pear.phpunit.de/File_Iterator-1.3.1 install ok: channel://pear.phpunit.de/Text_Template-1.1.1 install ok: channel://pear.phpunit.de/PHP_Timer-1.0.2 install ok: channel://pear.phpunit.de/PHP_TokenStream-1.1.3 install ok: channel://pear.phpunit.de/PHP_CodeCoverage-1.1.2 install ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.1.1
インストール完了。早速バージョン確認のため、下記コマンドを実行。
% phpunit --version zsh: command not found: phpunit
コマンドが見つからない。。
再度、インストールコマンドをたたくと
% sudo pear install phpunit/PHPUnit Unknown remote channel: pear.symfony-project.com Did not download optional dependencies: phpunit/PHP_Invoker, use --alldeps to download automatically phpunit/PHPUnit requires package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2) phpunit/PHPUnit requires PHP extension "dom" phpunit/PHPUnit can optionally use package "phpunit/PHP_Invoker" (version >= 1.1.0) No valid packages found install failed
下記が足りてないようなので、インストールする。
% sudo pear channel-discover pear.symfony-project.com % sudo pear install symfony/YAML
% yum install --enablerepo=remi php-dom
※remi レポジトリが追加されてない場合は、下記の「remi, epelレポジトリ の追加」セクションを参考にして追加してください。
http://tm.root-n.com/server:serversman_at_vps:setup_mysql5.1_phpmyadmin?s[]=remi
% sudo pear install --alldeps phpunit/PHPUnit
再度、インストールコマンドをたたく
% sudo pear install phpunit/PHPUnit downloading PHPUnit-3.6.10.tgz ... Starting to download PHPUnit-3.6.10.tgz (118,595 bytes) ..........................done: 118,595 bytes install ok: channel://pear.phpunit.de/PHPUnit-3.6.10
今度は成功したようだ。再度、確認コマンドを発行。
% phpunit --version PHPUnit 3.6.10 by Sebastian Bergmann.
インストールOK。
テストケースのスケルトン(ひな型ファイル)の自動生成を試してみます。
% phpunit --skeleton-test Hello PHPUnit 3.6.10 by Sebastian Bergmann. The functionality of phpunit --skeleton-class and phpunit --skeleton-test will be removed in PHPUnit 3.7. Please pear install phpunit/PHPUnit_SkeletonGenerator and use phpunit-skelgen --class and phpunit-skelgen --test instead. Sorry for any inconvenience caused by this change. Neither "Hello.php" nor "Hello.php" could be opened.
PHPUnit 3.7 から現行コマンドが廃止されるから、phpunit/PHPUnit_SkeletonGenerator をインストールしろとの事。
% sudo pear install phpunit/PHPUnit_SkeletonGenerator Unknown remote channel: components.ez.no phpunit/PHPUnit_SkeletonGenerator requires package "channel://components.ez.no/ConsoleTools" (version >= 1.6) No valid packages found install failed
ConsoleTools が無いと怒られる。
% sudo pear channel-discover components.ez.no % sudo pear install components.ez.no/ConsoleTools
% sudo pear install phpunit/PHPUnit_SkeletonGenerator downloading PHPUnit_SkeletonGenerator-1.1.0.tgz ... Starting to download PHPUnit_SkeletonGenerator-1.1.0.tgz (10,810 bytes) .....done: 10,810 bytes install ok: channel://pear.phpunit.de/PHPUnit_SkeletonGenerator-1.1.0
今度は入った。
気を取り直して、スケルトン(ひな型ファイル)の自動生成
まずは、テスト用に下記の class を用意。ファイル名は「Hello.php」とする。
<?php class Hello { public function getMessage() { return "hello world"; } }
Hello.php がある階層に移動して、下記コマンドを発行
% phpunit-skelgen --test Hello
すると、同階層に HelloTest.php が自動生成されます。
<?php /** * Generated by PHPUnit_SkeletonGenerator on 2012-03-15 at 10:49:28. */ class HelloTest extends PHPUnit_Framework_TestCase { /** * @var Hello */ protected $object; /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. */ protected function setUp() { $this->object = new Hello; } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. */ protected function tearDown() { } /** * @covers Hello::getMessage * @todo Implement testGetMessage(). */ public function testGetMessage() { // Remove the following lines when you implement this test. $this->markTestIncomplete( 'This test has not been implemented yet.' ); } }
PHPUnit の TestCase.php と、テスト対象の Hello.php を require するように下記2行を HelloTest.php に追加します。
require '/usr/share/pear/PHPUnit/Framework/TestCase.php'; require './Hello.php';
<?php require '/usr/share/pear/PHPUnit/Framework/TestCase.php'; require './Hello.php'; /** * Generated by PHPUnit_SkeletonGenerator on 2012-03-15 at 10:49:28. */ class HelloTest extends PHPUnit_Framework_TestCase { : snip :
% phpunit HelloTest.php PHPUnit 3.6.10 by Sebastian Bergmann. I Time: 0 seconds, Memory: 2.25Mb OK, but incomplete or skipped tests! Tests: 1, Assertions: 0, Incomplete: 1.
まだテストが未完成あるいは未実装であるため、上記の結果が返ってきます。
余談ですが、.bashrc や .zshrc に –colors オプションを付けてエイリアスを張っておくとテストの実行結果に色が付くので便利です。
alias phpunit="phpunit --colors"
testGetMessageメソッドにテストを実装してみます。
public function testGetMessage() { // Remove the following lines when you implement this test. //$this->markTestIncomplete( // 'This test has not been implemented yet.' //); $this->assertEquals('hello world', $this->object->getMessage()); }
上記のように assertEquals メソッドを使って、第一引数と第二引数の値が等価かテストします。
保存したら、テストを実行します。
% phpunit HelloTest.php PHPUnit 3.6.10 by Sebastian Bergmann. . Time: 0 seconds, Memory: 2.50Mb OK (1 test, 1 assertion)
テストが通りました。
public function testGetMessage() { // Remove the following lines when you implement this test. //$this->markTestIncomplete( // 'This test has not been implemented yet.' //); $this->assertEquals('hoge world', $this->object->getMessage()); }
上記のように、第一引数の期待する値にわざと「hoge world」を設定します。
保存したら、テストを実行します。
% phpunit HelloTest.php PHPUnit 3.6.10 by Sebastian Bergmann. F Time: 0 seconds, Memory: 2.50Mb There was 1 failure: 1) HelloTest::testGetMessage Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -'hoge world' +'hello world' /path/to/HelloTest.php:43 FAILURES! Tests: 1, Assertions: 1, Failures: 1.
テストが失敗したことを確認できます。
その他のテストメソッドやマニュアルは下記URLを参照してください。
PHPUnit Manual
http://www.phpunit.de/manual/3.7/ja/index.html