phpunit - taka512/memo GitHub Wiki

phpunit

1. インストール

$ pear config-create /home/share ~/.pearrc
$ pear install pear
$ vi .bashrc
PATH='/home/share/pear':$PATH
$ source .bashrc
$ pear channel-discover pear.phpunit.de
$ pear install phpunit/PHPUnit

phpunitのモック機能

phpunitのモック機能を調べた結果

1. getMock

1.1 呼び出し例

$stub = $this->getMock('SomeClass');

1.2 getMockのパラメータ

/**
 * Returns a mock object for the specified class.
 *
 * @param  string  $originalClassName
 * @param  array   $methods
 * @param  array   $arguments
 * @param  string  $mockClassName
 * @param  boolean $callOriginalConstructor
 * @param  boolean $callOriginalClone
 * @param  boolean $callAutoload
 * @return PHPUnit_Framework_MockObject_MockObject
 * @throws InvalidArgumentException
 * @since  Method available since Release 3.0.0
 */
public function getMock($originalClassName, $methods = array(),
   array $arguments = array(), $mockClassName = '',
   $callOriginalConstructor = TRUE, $callOriginalClone = TRUE,
   $callAutoload = TRUE) {

1.3 引数の動作

デフォルトでは、指定したクラスのすべてのメソッドが単に NULL を返すだけのテストダブルとなります。 返り値を変更するには、たとえば will($this->returnValue()) を使います。

オプションの第二パラメータを指定すると、その配列の中に含まれる名前のメソッドだけが
                  テストダブルに置き換えて、その他のメソッドはそのままとなります。
オプションの第三パラメータには、元クラスのコンストラクタに渡すパラメータの配列を渡します 
                 (デフォルトでは、コンストラクタはダミー実装に置き換えられません)。
オプションの第四パラメータを使うと、生成されるテストダブルクラスのクラス名を指定することができます。
オプションの第五パラメータを使うと、元クラスのコンストラクタを呼び出さないようにすることができます。
オプションの第六パラメータを使うと、元クラスの clone コンストラクタを呼び出さないようにすることができます。
オプションの第七パラメータを使うと、テストダブルクラスの生成時に __autoload() を無効にすることができます。

1.4 getMockBuilderkから設定する場合

$api = $this->getMockBuilder('Pexar\FancrewBundle\Services\ShopEntryApi')
    ->disableOriginalConstructor()
    ->getMock();

1.4.1 setMethods

setMethods(array $methods) をモックビルダーオブジェクト上でコールすると、 テストダブルで置き換えるメソッドを指定することができます。その他のメソッドの挙動は変更しません。

1.4.2 setConstructorArgs

setConstructorArgs(array $args) をコールしてパラメータの配列を渡すと、 それを元クラスのコンストラクタに渡すことができます (デフォルトのダミー実装では、コンストラクタは置き換えません)。

1.4.3 setMockClassName

setMockClassName($name) を使うと、生成されるテストダブルクラスのクラス名を指定することができます。

1.4.4 disableOriginalConstructor

disableOriginalConstructor() を使うと、元クラスのコンストラクタを無効にすることができます。

1.4.5 disableOriginalClone

disableOriginalClone() を使うと、元クラスのクローンコンストラクタを無効にすることができます。

1.4.6 disableAutoload

disableAutoload() を使うと、テストダブルクラスを生成するときに __autoload() を無効にすることができます。


1.5 expects

expectsは下記matcherを指定して起動回数を指定できる

メソッド 動作
any() 評価対象のメソッドがゼロ回以上実行された際にマッチするオブジェクトを返します。
never() 評価対象のメソッドが実行されなかった際にマッチするオブジェクトを返します。
atLeastOnce() 評価対象のメソッドが最低一回以上実行された際にマッチするオブジェクトを返します。
once() 評価対象のメソッドが一度だけ実行された際にマッチするオブジェクトを返します。
exactly(int $count) 評価対象のメソッドが指定した回数だけ実行された際にマッチするオブジェクトを返します。
at(int $index) 評価対象のメソッドが $index 回目に実行された際にマッチするオブジェクトを返します。

1.6 will

will() メソッドは、スタブメソッドの戻り値を指定するメソッド

メソッド 動作
returnValue(mixed $value) 戻り値を単純に指定する。いつも同じ値を返すことになる。
returnArgument(integer $argumentIndex) 戻り値をスタブメソッドに渡された引数にする。$argumentIndex 番目の引数が戻り値になる。
returnCallback(mixed $callback) $callback で指定されたメソッドをコールバックし、その戻り値をスタブメソッドの戻り値にする。
throwException(Exception $exception) 戻り値を返すのではなく、例外をスロウする。$exception がそのままスロウされる。
onConsecutiveCalls(mixed $value, …) 引数はいくつでも指定できる。スタブメソッドがコールされる度に、引数で渡された値を順番に返すようになる。引数に値ではなく、スタブ API を指定することもできる。