テストしたい DB アダプターを使用するモデルがあります。DB アダプターのコンストラクターはすべての DB 接続を処理するため、テスト中は避けたいと思います。そうしないと、db パス / db ユーザー名などが設定されていないというエラーが返されます。
disableOriginalConstructor()
現在実行中のコードは以下のとおりです。コンストラクターの呼び出しを防ぐために使用していることがわかります。
問題は、で使用しようとすると、このエラーが発生すること$mysql_stub
ですwill()
:
PHPUnit_Framework_MockObject_Builder_InvocationMocker::will() に渡される引数 1 は、インターフェース PHPUnit_Framework_MockObject_Stub、指定された Mock_Pages_MySQL_Page_46612429 のインスタンスを実装する必要があり、185 行目で /Applications/MAMP/htdocs/lib/Pages/trunk/Tests/Unit/PageTest.php で呼び出され、定義されます
誰かがアドバイスできますか、正しい構文は何ですか?
class Page {
public function getByUrl($url)
{
$db_page = $this->getDAOInterface();
$db_page->getByUrl($url);
$this->assign($db_page);
return $this;
}
}
class PageTest extends PHPUnit_Framework_TestCase
{
public function testGetByUrl()
{
$test_url = "foo-bar";
$page_stub = $this->getMock(
'Pages_Model_Page',
array('getDAOInterface', 'assign')
);
$mysql_stub = $this->getMockBuilder('Pages_MySQL_Page')
->setMethods(array('getByUrl'))
->disableOriginalConstructor()
->getMock();
$mysql_stub->expects($this->once())
->method('getByUrl')
->with($this->equalTo($test_url));
$page_stub->expects($this->once())
->method('getDAOInterface')
->with()
->will($mysql_stub);
$page_stub->expects($this->once())
->method('assign')
->with($mysql_stub);
$page_stub->geByUrl($test_url);
}
}