第6回 UnitTestをする理由 - テスト講座

PHP基礎編

TOM先生のテスト講座

Lecutures on PHP

第6回 UnitTestをする理由 (その3)

 このエントリーをはてなブックマークに追加

PHPSpec

http://www.phpspec.org/で配布されているテスティングフレームワークです。BDDに従った開発/テストを行うことができます。Piece FrameworkはPHPSpecを使ったUnitTestに対応しています。

PHPUnitと同じ例をPHPSpecで記述すると次のようになります。

コード4 PHPSpecのテストコード例
<?php
require_once 'Member.php';
 
class DescribeMember extends PHPSpec_Context
{
    private $member = null;
 
    public function before()
    {
	$this->member = new Member();
    }
 
    public function itShould存在しない会員番号で検索したらnull()
    {
        $this->spec($this->member->find(99999))->should->equal(null);
    }
}

PHPSpecとPHPUnit/SimpleTestの最大の違いは動作を確認する部分の記述方法です。"It should ..."というように、英語の文法に近い形でどのような振る舞いをさせたいのかを感覚的に記述できるように工夫されています。我々は残念ながら英語がネイティブ言語ではないので、少し気持ちが伝わってこないですが、日本語的に記述できるようにしようとされている方もいるようです。

実行結果4 PHPSpecの実行結果
$ phpspec MemberSpec
.
 
Finished in 0.1190710067749 seconds
 
1 examples, 0 failures

ここまで見てきてやはり「面倒だなぁ」と感じたかもしれません。自分が書いているコード以外にこのようなテストコードを書かないといけないというのは面倒だと最初は感じてしまうかもしれませんね。

それを解消するために我々Maple Projectが開発しているDocTestというツールを次回紹介したいと思います。

今回のまとめ

  • プログラマはいつも"不安"を抱えている
  • その"不安"はプログラマの効率を著しく下げる
  • 漠然とした"不安"を目に見える形にするのがUnitTestで行うテスト
  • プログラマの責務は自分の担当部分を仕様通りに動作させること
  • 仕様通りに動作することを保証するためにもUnitTestは必要
  • プログラマの原動力は「動いた!!!」という感動
  • UnitTestはその感動を後押しする
  • UnitTestは他の人の為に記述するものではなく、プログラマが自分のために自分自身で自分が普段使っている言語で記述するもの

次回は?

TOM先生次回はわれわれMaple Projectが提供するDocTestを使って、より"楽しく"UnitTestを行う方法を紹介したいと思います。




  • TOM先生

本名:小林智樹

ソリッド・ブルー株式会社 代表取締役CTO http://solidblue.jp/
Mapleプロジェクト コミッター http://kunit.jp/maple/

SI企業にて、運用保守担当として大手企業や各省庁の大規模システムを支える。
その後、起業・独立し、現在はソリッド・ブルー株式会社のCTOとして、PHPを中心とした技術戦略の立案などを行っている。また、PHPフレームワークMapleプロジェクトの一員として、RESTfulやTDDについて普及活動を展開している。

ご意見・感想フォーム

今回の「TOM先生のテスト講座」への評価・ご意見があればご記入下さい。

評価:
ご意見・感想:



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)