2012-08-06 19:22:58

PHPUnitによる自動テスト入門

テーマ:PHP
CyberX インフラエンジニアの山本です。

新卒エンジニアも業務に馴染んできたこともあり、社内エンジニアミーティングのLTで
IDE(PhpStorm)+PHPUnitのデモンストレーションをLTと称して発表いたしました。

ユニットテスト/自動テストとは
ユニットテストとは、そもそも日本語では単体テストと呼ばれ、個々のモジュールが
仕様を満たしているかを試験する工程です。

昨今ではTDD(テスト駆動開発)やBDD(振舞駆動開発)・CI(継続的インテグレーション)の
自動テストという形で、ユニットテストの重要性はさらに高まりを見せました。

なお、自動テストとは各モジュールのテスト内容をプログラマブルに表現し、機械的に
ユニットテストを実施する仕組みです。
PHPUnitはその仕組みの中で、PHP言語を対象にしたユニットテストを提供します。

難しい言葉ばかりを並べましたが、簡単には以下のように説明できるでしょう。

 ・ユニットテストとは、モジュールの仕様試験を行う開発工程。
 ・関数やクラスメソッドの単体試験を機械的に行うことができる。
 ・プログラマブルに書かれた、モジュールの仕様書。
 ・対象ソースコードをリファクタなど改変後に自動テストを行うことで
  デグレーション(バグ)が発生しているか機械的に検知することができる。

IDE上で、PHPUnitのテスト結果はどう見える?
今回の発表は、あくまでPHPUnitをIDE上で実行した際、どのような結果が得られるかの
デモンストレーションにフォーカスして説明いたしました。
このため、ここでの説明では四則演算を行うクラスを利用して説明しています。

ユニットテストで評価するプログラム(Arithmetic.php)
<?php
/**
* 四則演算を行うクラス
*/
class Arithmetic
{
/**
* 引数x,yの足し算を行う
*/
public function addition($x, $y) {
$ret = $x + $y;
return($ret);
}

/**
* 引数x,yの引き算を行う
*/
public function subtraction($x, $y) {
$ret = $x - $y;
return($ret);
}

/**
* 引数x,yの掛け算を行う
*/
public function multiplication($x, $y) {
$ret = $x * $y;
return($ret);
}

/**
* 引数x,yの割り算を行う
*/
public function division($x, $y) {
$ret = $x / $y;
return($ret);
}
}


自動テストを行うクラス(TestArithmetic.php)
<?php
/**
* Arithmeticクラスのユニットテスト
*/
require_once 'PHPUnit/Autoload.php';
require_once '../logic/Arithmetic.php';

class TestArithmetic extends PHPUnit_Framework_TestCase
{
/**
* @var Arithmetic
*/
protected $arithmetic;

/**
* テスト対象のオブジェクトの生成
*/
protected function setUp() {
// TODO Unitテスト開始時動作
$this->arithmetic = new Arithmetic();
}

/**
* 足し算の検証。10+5=15となることを確認する
*/
public function testAddition() {
$this->assertEquals( 15, $this->arithmetic->addition(10, 5) );
}

/**
* 引き算の検証。10-5=5となることを確認する
*/
public function testSubtraction() {
$this->assertEquals( 5, $this->arithmetic->subtraction(10, 5) );
}

/**
* 掛け算の検証。10x5=50となることを検証する
*/
public function testMultiplication() {
$this->assertEquals( 50, $this->arithmetic->multiplication(10, 5) );
}

/**
* 割り算の検証。10/5=2となることを検証する
*/
public function testDivision() {
$this->assertEquals( 2, $this->arithmetic->division(10, 5) );
}
}

ユニットテストが成功した場合
ユニットテスト結果がすべてパスし、問題がないことを示しています。
CyberX:エンジニアブログ-UnitTest-Green


ユニットテストが失敗した場合
ここでは掛け算を行うメソッドに手を加え、計算結果が一致しないよう修正しました。
testMultiplication()メソッドのアサーションに問題があることを表示してくれます。
CyberX:エンジニアブログ-UnitTest-Red


PHPUnitの環境構築
以上で発表内容は終了なのですが、PHPUnitを行うには若干準備が必要となるため
簡単ですが環境構築方法について説明を追記いたします。

PHPUnitを利用するには、PHP実行環境に拡張ライブラリ(PEAR)をインストールします。
PHP実行環境上で、基本的には以下のコマンドでインストールすることができます。
# pear channel-discover pear.phpunit.de
# pear install phpunit/PHPUnit
※OSごとのPEARインストール方法はPHPのマニュアルをご覧ください。


【参考資料】
http://www.phpunit.de/manual/3.6/ja/index.html
いいね!した人  |  コメント(0)  |  リブログ(0)

cyberxtecさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

最近の画像つき記事
 もっと見る >>

コメント

[コメントをする]

コメント投稿