Phake@PHPユニットテスト¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. Phakeとは¶
ユニットテストに必要なテストダブルを提供する。
02. テストダブル¶
mock
メソッド¶
クラスの名前空間を元に、モックまたはスタブとして使用する擬似オブジェクトを作成する。
以降の処理での用途によって、モックまたはスタブの呼び名が異なることに注意する。
<?php
// モックとして使用する擬似オブジェクトを作成する。
$mock = Phake::mock(Foo::class);
// スタブとして使用する擬似オブジェクトを作成する。
$stub = Phake::mock(Foo::class);
when
メソッド¶
モックまたはスタブのメソッドに対して、処理の内容を定義する。
また、特定の変数が渡された時に、特定の値を返却させられる。
*実装例*
スタブのfind
メソッドは、1
が渡された時に、空配列を返却する。
<?php
// スタブとして使用する擬似オブジェクトを作成する。
$stub = Phake::mock(Foo::class);
// スタブのメソッドに処理内容を定義する。
\Phake::when($stub)
->find(1)
->thenReturn([]);
verify
メソッド¶
上層オブジェクトが下層オブジェクトをコールできることを確認するために、モックのメソッドがn
回実行できたことを検証する。
*実装例*
<?php
use PHPUnit\Framework\TestCase;
class FooTest extends TestCase
{
/**
* @test
*/
public function testFoo_Bar_Baz()
{
// モックとして使用する擬似オブジェクトを作成する。
$mockFooRepository = Phake::mock(FooRepository::class);
$fooId = Phake::mock(FooId::class);
// モックのメソッドに処理内容を定義する。
\Phake::when($mockFooRepository)
->find($fooId)
->thenReturn(new User(1));
// 上層クラスに対して、下層クラスのモックのインジェクションを実行する
$foo = new Foo($mockFooRepository);
// 上層クラスの内部にある下層モックのfindメソッドをコールする
$foo->getUser($fooId)
// 上層のクラスが、下層モックにパラメーターを渡し、メソッドを実行したことを検証する。
Phake::verify($mockFooRepository, Phake::times(1))->find($fooId);
}
}