Web総合研究所

1990年生まれ文系プログラマーのまとめ

PHPUnitの導入方法メモ

今更ながら、一番簡素なPHPUnitの導入メモ
ちなみに参考資料は「PHP逆引きレシピ 第2版」です。

PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)

PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)

ルートディレクトリにcomposer.jsonを以下のような内容で配置。
参考資料ではdbunitphpunit-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