PHPUnitをもう少し

◼︎ 目次

  1. 概要
  2. 説明

◼︎ 概要

前回説明したPHPUnit入門の入門
をもう少し詳しく見てみる
主にモックとは何かについて調べたい

◼︎ 説明

モック概要

  • 「Mock」には「模造品」「偽の」といった意味がある
  • これを使うことで「まだ存在しない」クラスのインスタンスを使ったテストが可能になる

クラス名について

基本的に「テストしたいクラス名+Test」とする
このクラスが「テストケース」となる

メソッド名

テストしたいメソッドは「public funcrion test+テストしたい関数名_仕様説明()」
また、初期化処理やDB準備処理やその後始末などは以下のメソッドで行う

メソッド名 実行のタイミング
setUpBeforeClass() テストケース開始時
setUp() テストメソッド実行前
tearDown() テストメソッド実行後
tearDownAfterClass() テストケース終了時

アサーション

期待した結果を返しているかはアサーションを記述することで確認することができる
主要なアサーション

アサーション名 評価方法
assertEquals(期待値, 実行値) 期待値と実行値が同じならば正
assertTrue(実行値) 実行値がtrueならば正
assertFalse(実行値) 実行値がfalseならば正

その他のアサーションについて
付録A アサーション

モックとスタブ

モックとスタブというものがあるらしくどちらもgetMock()を使う

スタブ

  • テスト時の呼び出しに対して、あらかじめ用意された結果を返す

モック

  • エクスペクテーションが事前にプログラムされたもの
  • エクスペクテーションとは受信する一連の呼び出しの仕様を表したもの
  • with()で設定する
  • 期待されない呼び出しが行われた場合は例外をスローする
  • またテスト実行後の検証で期待された呼び出しがすべてきちんと行われたかどうかを確認する

テストしたいクラスが、他のクラスに依存してるとき、依存してるクラスをモック(あるいはスタブ)する
スタブは、ただ戻り値を返すだけ、モックはwith()を使ってモックで作った依存クラスに与えられた引数が正しいかチェックする

モックを使ったサンプルプログラムの例

...
        // モック
        $dbMock = $this->getMock('Database');
        $dbMock->expects($this->once())
                            ->method('write')
                            ->with($this->equalTo('New Title'), $this->equalTo('aaa wrote: "New Title" New Text'));

        // スタブ
        $userStub = $this->getMock('User');
        $userStub->expects($this->any())
                            ->method('getName')
                            ->will($this->returnValue('aaa'));
...

引用元:Test DoubleとPHPUnit

関数 説明
getMock() モックやスタブを生成する
expects() 動作を設定する
引数:何回呼ばれるべきかを指定
method() 対象のメソッドを指定
with() エクスペクテーションを設定する、モックが呼ばれた時に与えられた引数が正しいかをチェックする
引数:与えられるべき引数をチェックする、equalTo()とか
equalTo() 一致するか
引数:与えられるべき値
will() モックの戻り値を指定する
引数:戻り値、$this->returnValue()を使う
returnValue() 戻り値

getMockについて

object getMock (
  $className,
  [
    array $methods, 
    [
      array $arguments, 
      [
        string $mockClassName
      ]
    ]
  ]
)
パラメータ 必須 意味
$className このクラスのモックオブジェクトを生成する
array $methods 生成するメソッド
array $arguments コンストラクタの引数
string $mockClassName モックゾブジェクト自身のクラス名
デフォルトはMock_[$className]_[生成実行(ミリ秒)のハッシュ値]
// 最も簡単なコードは以下
$mock = $this->getMock('test');

// メソッドを指定してモックオブジェクトを生成する場合
// getMockメソッドの第2引数にメソッド名を配列で指定する
$mock = $this->getMock('test', array('getName', 'getCode', 'getPrice'));

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です