我有一个使用数据库适配器的模型,我想测试。数据库适配器的构造函数处理所有数据库连接,所以我想在测试期间避免它,否则它会返回有关db pass / db用户名等未设置的错误。
我正在运行的代码如下所示,因为您看到我正在使用disableOriginalConstructor()
来阻止调用构造函数。
问题是,当我尝试在$mysql_stub
中使用will()
时,我收到此错误:
参数1传递给 PHPUnit_Framework_MockObject_Builder_InvocationMocker :: will()必须 实现接口PHPUnit_Framework_MockObject_Stub,实例 给出Mock_Pages_MySQL_Page_46612429,调用 /Applications/MAMP/htdocs/lib/Pages/trunk/Tests/Unit/PageTest.php on 第185行和定义
有人可以建议,正确的语法是什么?
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);
}
}
答案 0 :(得分:5)
好的,终于弄清楚它出了什么问题。错误是由于我的遗漏造成的。遗嘱应按以下方式调用:
$page_stub->expects($this->once())
->method('getDAOInterface')
->with()
->will($this->returnValue($mysql_stub));