Windows + コマンドプロンプト + PHPUnit でユニットテスト
今更ながらPHPUnitを試したのでメモ。
概要
PHPUnit3で始めるユニットテストが解りやすかったが情報が古い。でも、概要をつかむには良さそうです。
大まかな内容としては「◯◯の命令を△△の形式で呼び出して、□□の結果が返ってくればOK」というコードをたくさん書いたプログラムを準備しておき、それを実行すれば各命令が正しく実行されたかを知ることができるというもの。(プログラム作成中に不具合を作ってしまっても、即座に検知できる…かもしれない。)
大人数で各々が大量の部品を作るような開発では、上手く導入するととても活躍してくれそう。一人/少人数で作成しているようなプログラムでは、使いどころが難しいかも。(自分が解っていないだけかも。)
導入自体は簡単。
導入
自分の環境に合わせて「Windows+コマンドプロンプト+PHPUnit」でPHPプログラムのテストをしてみたので、手順をメモ。PHPUnit のインストールを主に参考にしています。
まずは公式サイトから phpunit.phar
の安定版を入手する。
任意のディレクトリ内(C:\xxx\phpunit
とする)に、入手した phpunit.phar
を配置する。
C:\xxx\phpunit
内に phpunit.cmd
を作成し、以下の内容を記述する。(PHPへのパスは環境に合わせて設定する。)
@C:\xampp\php\php.exe "%~dp0phpunit.phar" %*
コマンドプロンプトで C:\xxx\phpunit
内に移動し、以下のコマンドを実行。以下のようにバージョン情報が表示されれば成功。
C:\xxx\phpunit>phpunit --version
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
サンプルで動作確認
Getting Started with PHPUnit を参考にテスト。
上ページの内容を参考に C:\xxx\phpunit\src\Money.php
(テストしたいクラス)を作成。次に C:\xxx\phpunit\tests\MoneyTest.php
(テスト用プログラム)も作成。
コマンドプロンプトから、以下のようにコマンドを実行するとテストできる。
C:\xxx\phpunit>phpunit --bootstrap src/Money.php tests/MoneyTest
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
.
Time: 31 ms, Memory: 4.00Mb
OK (1 test, 1 assertion)
上のように表示されればテスト成功。
自作のプログラムで動作確認
PHPUnit 用のテストの書き方 を参考にテスト。
まずは C:\xxx\phpunit\src\calculate.php
を作成し、掛け算と割り算の計算結果を返す命令を定義。これらの命令が正しく動作しているかテストするものとする。
<?php
function multiplication($x, $y) {
return $x * $y;
}
function division($x, $y) {
return $x / $y;
}
C:\xxx\phpunit\tests\calculate.php
を作成し、各命令をテストするコードを書く。(計算結果が正しく返ってくればテスト成功とする。)
<?php
require_once 'C:/localhost/home/test/public_html/phpunit/src/calculate.php';
class Calculate extends PHPUnit_Framework_TestCase
{
public function testCalculate()
{
$this->assertEquals(8, multiplication(4, 2));
$this->assertEquals(2, division(4, 2));
}
}
コマンドプロンプトからテスト実行。
C:\xxx\phpunit>phpunit tests/calculate
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
.
Time: 30 ms, Memory: 4.00Mb
OK (1 test, 2 assertions)
上のように表示されればテスト成功。試しに関数の内容を間違ったものにしてテストすると。
FAILURES!
Tests: 1, Assertions: 2, Failures: 1.
のような結果が表示されるので、正しくテストできていることが確認できる。