第1章 PHPUnit のインストール

注記

以前のバージョンの PHPUnit からのアップグレードをする場合は、 「PHPUnit 4.0 から PHPUnit 4.1 へのアップグレード」 を参照ください。

要件

PHPUnit 4.1 は PHP 5.3.3 以降のバージョンで動作しますが、最新版の PHP を使うことを強く推奨します。

PHPUnit を使うには、拡張モジュール domjsonpcrereflection、 そして spl が必要です。これらは、通常はデフォルトでコンパイルされて有効になっています。 中には無効にすることすらできず、常に有効になっているものもあります。

コードカバレッジをサポートするには Xdebug 2.1.3 以降が必要です。 しかし、最新版の Xdebug を使うことを強く推奨します。 また、コードカバレッジ機能を利用するには、 tokenizer 拡張モジュールも必要です。 コードカバレッジ情報を XML 形式で記録するには、xmlwriter 拡張モジュールも必要です。

PHPUnit を PHP Archive (PHAR) から使うには、phar 拡張モジュールが必要です。 Suhosin 拡張モジュールを使っている環境で PHPUnit を PHP Archive (PHAR) から使いたい場合は、 suhosin.executor.include.whitelist = phar の設定が必要です。

PHPUnit の PHAR で --self-update 機能を使うには、openssl 拡張モジュールが必要です。

PHP Archive (PHAR)

PHPUnit を入手する一番簡単な方法は、PHP Archive (PHAR) をダウンロードすることです。 必要な依存コンポーネントがすべて (オプションのコンポーネントの一部も含めて) ひとつのファイルにまとめられています。

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit

注記

https://phar.phpunit.de/ からダウンロードするには、 TLS/SNI をサポートしたクライアント、たとえば wget 1.14 以降などが必要です。

もちろん、ダウンロードした PHAR をそのまますぐに使ってもかまいません。

wget https://phar.phpunit.de/phpunit.phar
php phpunit.phar

Verifying PHPUnit PHAR Releases

All official releases of code distributed by the PHPUnit Project are signed by the release manager for the release. PGP signatures and SHA1 hashes are available for verification on phar.phpunit.de.

The following example details how release verification works. We start by downloading phpunit.phar as well as its detached PGP signature phpunit.phar.asc:

wget https://phar.phpunit.de/phpunit.phar
wget https://phar.phpunit.de/phpunit.phar.asc

We want to verify PHPUnit's PHP Archive (phpunit.phar) against its detached signature (phpunit.phar.asc):

gpg phpunit.phar.asc
gpg: Signature made Sat 19 Jul 2014 01:28:02 PM CEST using RSA key ID 6372C20A
gpg: Can't check signature: public key not found

We don't have the release manager's public key (6372C20A) in our local system. In order to proceed with the verification we need to retrieve the release manager's public key from a key server. One such server is pgp.uni-mainz.de. The public key servers are linked together, so you should be able to connect to any key server.

gpg --keyserver pgp.uni-mainz.de --recv-keys 0x4AA394086372C20A
gpg: requesting key 6372C20A from hkp server pgp.uni-mainz.de
gpg: key 6372C20A: public key "Sebastian Bergmann <sb@sebastian-bergmann.de>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Now we have received a public key for an entity known as "Sebastian Bergmann <sb@sebastian-bergmann.de>". However, we have no way of verifying this key was created by the person known as Sebastian Bergmann. But, let's try to verify the release signature again.

gpg phpunit.phar.asc
gpg: Signature made Sat 19 Jul 2014 01:28:02 PM CEST using RSA key ID 6372C20A
gpg: Good signature from "Sebastian Bergmann <sb@sebastian-bergmann.de>"
gpg:                 aka "Sebastian Bergmann <sebastian@php.net>"
gpg:                 aka "Sebastian Bergmann <sebastian@thephp.cc>"
gpg:                 aka "Sebastian Bergmann <sebastian@phpunit.de>"
gpg:                 aka "Sebastian Bergmann <sebastian.bergmann@thephp.cc>"
gpg:                 aka "[jpeg image of size 40635]"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: D840 6D0D 8294 7747 2937  7831 4AA3 9408 6372 C20A

At this point, the signature is good, but we don't trust this key. A good signature means that the file has not been tampered. However, due to the nature of public key cryptography, you need to additionally verify that key 6372C20A was created by the real Sebastian Bergmann.

Any attacker can create a public key and upload it to the public key servers. They can then create a malicious release signed by this fake key. Then, if you tried to verify the signature of this corrupt release, it would succeed because the key was not the "real" key. Therefore, you need to validate the authenticity of this key. Validating the authenticity of a public key, however, is outside the scope of this documentation.

Composer

Composer を使ってプロジェクトの依存関係を管理するには、 phpunit/phpunit への依存情報をプロジェクトの composer.json ファイルに追加します。 次に示すのは最小限の composer.json ファイルの例で、 開発時の PHPUnit 4.1 への依存を定義しています。

{
    "require-dev": {
        "phpunit/phpunit": "4.1.*"
    }
}

システム全体で使えるように Composer でインストールするには、次のようにします。

composer global require "phpunit/phpunit=4.1.*"

~/.composer/vendor/bin/ にパスを通すことを忘れないようにしましょう。

オプションのパッケージ

オプションのパッケージとして、これらが使えます。

PHP_Invoker

callable をタイムアウトつきで実行するユーティリティクラス。 テストのタイムアウトを厳格に指定するために必要なパッケージ。

このパッケージは、PHPUnit の PHAR 版の中に含まれています。 Composer でインストールするには、 "require-dev" に次の行を追加します。

"phpunit/php-invoker": "*"
DbUnit

DbUnit の PHP/PHPUnit 向けの移植。データベースとのやりとりをテスト可能にする。

このパッケージは、PHPUnit の PHAR 版の中に含まれています。 Composer でインストールするには、 "require-dev" に次の行を追加します。

"phpunit/dbunit": ">=1.2"
PHPUnit_Selenium

PHPUnit 用の Selenium RC インテグレーション。

このパッケージは、PHPUnit の PHAR 版の中に含まれています。 Composer でインストールするには、 "require-dev" に次の行を追加します。

"phpunit/phpunit-selenium": ">=1.2"
このページの改善案をGitHubで提案してください!