今更ながら、一番簡素なPHPUnitの導入メモ
ちなみに参考資料は「PHP逆引きレシピ 第2版」です。
ルートディレクトリに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';
class UserTest extends PHPUnit_Framework_TestCase
{
public function testVar()
{
$user = new User('佐藤');
$this->assertEquals('佐藤', $user->name);
}
public function testメッセージ作成()
{
$user = new User('河合');
$test = $user->createMessage();
$expected = 'こんにちは、河合さん!';
$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