我从以下测试开始,一切都很好:
class Search_Model_Mapper_Search_GetDbTableTest extends PHPUnit_Framework_TestCase
{
public function testGetDbTable()
{
$mapper = new Search_Model_Mapper_Search();
$dbClass = new ReflectionClass($mapper->getDbTable('Search_Model_DbTable_Search'));
$this->assertEquals('Search_Model_DbTable_Search', $dbClass->getName());
}
}
然后,我在其他地方添加了另一项测试:
class Search_IndexController_FulltextActionTest extends PHPUnit_Framework_TestCase
{
public function testQueryNoResults() {
$mapper = $this->getMockBuilder("Search_Model_Mapper_Search")
->disableOriginalConstructor()
->setMethods(array("find", "count"))
->getMock();
}
现在我收到致命错误Call to undefined method Search_Model_Mapper_Search::getDbTable()
我在原始测试中使用了反射来查找定义了Search_Model_Mapper_Search类的文件,它现在位于phar:///usr/local/bin/phpunit/phpunit-mock-objects/Framework/MockObject/Generator.php(335) : eval()'d code
中,当我在反射类上调用getMethods时,我得到一个空数组。
如果我跳过或删除了嘲笑课程的测试,当我在原始测试中调用getMethods时,我会得到完整的方法列表。
是否有一些我错过的东西确保每个测试都运行得很干净,或者这是PHPUnit和/或PHPUnit Mock对象中的错误?
我通过phar
使用PHPUnit 4.3.1答案 0 :(得分:2)
这通常是因为原始类在被模拟之前未加载(或自动加载)。因此,模拟框架假设它不存在并创建一个虚拟类(没有方法)。
在嘲笑它之前尝试要求原始类。