PHPUnitをもう少し

Published: 2016年2月26日 by tomsato

◼︎ 目次

  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'));

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧