【发布时间】:2011-06-17 10:50:22
【问题描述】:
在我的 TDD 项目中,我试图测试抽象类中的方法。
abstract class Database_Mapper_Abstract
{
public function setTable($sTablename){
return('foo');
}
}
这是我编写简单测试的方式:
public function testCanSetTable(){
$oMock = $this->getMockForAbstractClass('JCMS_Database_Mapper_Abstract');
$oMock->expects($this->once())
->method('setTable')
->with($this->equalTo('foo'))
->will($this->returnValue('foo'));
$this->assertEquals('foo',$oMock->setTable());
}
当我运行此测试时,我收到以下错误:
Sebastian Bergmann 的 PHPUnit 3.5.13。
E
时间:1 秒,内存:6.75Mb
有 1 个错误:
1) Database_Mapper_AbstractTest::testCanSetTable 缺少参数 1 Database_Mapper_Abstract::setTable(),调用 K:\xampp\htdocs\tests\library\Database\Mapper\Abstract.php 在第 15 行并定义
K:\xampp\htdocs\library\Database\Mapper\Abstract.php:4 K:\xampp\htdocs\tests\library\Database\Mapper\Abstract.php:15
失败!测试:1,断言:0, 错误:1。
我的理解是它找不到 setTable 函数的参数。
但我使用with() 方法设置它。我也试过with('foo')。这对我也没有帮助。
有人有想法吗?
【问题讨论】:
-
我不知道这个测试框架但是如果你把
$this->assertEquals('foo',$oMock->setTable());改成$this->assertEquals('foo',$oMock->setTable('foo'));会发生什么 -
在我看来,你不应该模拟被测类。因为上面的代码没有测试方法 setTable 是否会返回 'foo',它定义方法 setTable 将返回 'foo'。模拟对象用于将它们作为参数传递给被测类,因此您无需创建大型对象图来满足依赖关系。
-
当我这样做时,我收到此错误:调用 1 次时,方法名称的预期失败等于
。方法预期调用1次,实际调用0次。
标签: php unit-testing phpunit