disableOriginalConstructor()和will()冲突

时间:2013-03-20 10:04:59

标签: php unit-testing phpunit

我有一个使用数据库适配器的模型,我想测试。数据库适配器的构造函数处理所有数据库连接,所以我想在测试期间避免它,否则它会返回有关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);
  }
}

1 个答案:

答案 0 :(得分:5)

好的,终于弄清楚它出了什么问题。错误是由于我的遗漏造成的。遗嘱应按以下方式调用:

$page_stub->expects($this->once())
          ->method('getDAOInterface')
          ->with()
          ->will($this->returnValue($mysql_stub));