今更ながら、一番簡素なPHPUnitの導入メモ
ちなみに参考資料は「PHP逆引きレシピ 第2版」です。
PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
- 作者: 鈴木憲治,山田直明,山本義之,浅野仁,櫻井雄大,安藤建一
- 出版社/メーカー: 翔泳社
- 発売日: 2013/10/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る
ルートディレクトリにcomposer.jsonを以下のような内容で配置。
参考資料ではdbunitやphpunit-seleniumの説明なしにいきなりサンプルコードが記載されいているが、
よくわからないまま進むのも気持ち悪いので、少し補完。
dbunitは、テスト用のDBを作成してくれるツール。
phpunit-seleniumはブラウザテストのツール
PHPでブラウザテストの自動化! Facebookの作ったツール「php-webdriver」で人生がときめく (サンプルコード付き) - コネヒト開発者ブログ
composer.json
{ "require-dev": { "phpunit/phpunit": "3.7.*", "phpunit/dbunit": ">=1.2", "phpunit/phpunit-selenium": ">=1.2" } }
$ composer install
テストされるclass
lib/User.php
<?php class User { public $name; public function __construct($name) { $this->name = $name; } public function createMessage() { return "こんにちは、{$this->name}さん!"; } }
テスト実行class
UserTest.php
<?php require_once __DIR__ . 'lib/User.php'; // "PHPUnit_Framework_TestCase"を継承してテスト用のクラスを作成 class UserTest extends PHPUnit_Framework_TestCase { // User->nameが佐藤になっているか確認するテスト public function testVar() { // Userインスタンス生成 $user = new User('佐藤'); // $user->nameが'佐藤'とイコールか確認する。 $this->assertEquals('佐藤', $user->name); } public function testメッセージ作成() //エラーメッセージがわかりやすいように関数名を日本語にした。 { $user = new User('河合'); $test = $user->createMessage(); $expected = 'こんにちは、河合さん!'; // $createMessage();の結果が、'こんにちは、河合さん'になってるか確認する $this->assertEquals($expected, $test); } }
実行
$ ./vendor/bin/phpunit UserTest.php ] /work/www/src/lib/User.phpPHPUnit 3.7.38 by Sebastian Bergmann. Time: 432 ms, Memory: 3.25MB
仮に「testメッセージ作成」関数が失敗した場合、下記が出力される。
There was 1 failure: 1) UserTest::testメッセージ作成 Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -'こんにちは、河合さん!' +'こんにちは、さん!' /work/www/src/UserTest.php:26 FAILURES! Tests: 2, Assertions: 2, Failures: 1.
このように、functionの名前は日本語で記述したほうがわかりやすい場合もある
.F <------ "."は成功、"F"はFail(失敗)"E"はPHPError