2014-10-15 2 views
1

원래 클래스를 사용하는 다른 테스트에서 문제가 발생하고, 모두가 좋았다 :나는 다음과 같은 시험을 시작

class Search_IndexController_FulltextActionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testQueryNoResults() { 
    $mapper = $this->getMockBuilder("Search_Model_Mapper_Search") 
     ->disableOriginalConstructor() 
     ->setMethods(array("find", "count")) 
     ->getMock(); 
} 
:

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()); 
    } 
} 

다음, 나는 다른 곳에서 다른 테스트를 추가

그리고 치명적인 오류가 발생했습니다. Call to undefined method Search_Model_Mapper_Search::getDbTable()

원래의 테스트에서 Reflection을 사용하여 Search_Model_Mapper_Search 클래스가 정의 된 파일을 찾았습니다. phar:///usr/local/bin/phpunit/phpunit-mock-objects/Framework/MockObject/Generator.php(335) : eval()'d code, 그리고 반사 된 클래스에 getMethods를 호출하면 빈 배열이 생깁니다.

클래스를 모의 테스트하는 것을 건너 뛰거나 삭제하면 원래 테스트에서 getMethods를 호출 할 때 전체 메서드 목록을 얻을 수 있습니다.

각 테스트가 정상적으로 실행되지 않았는지, 아니면 PHPUnit 및/또는 PHPUnit 모의 객체의 버그입니까?

나는의 Phar 원래 클래스를 조롱하기 전에로드 (또는 자동으로 적재)되지 않기 때문에 일반적으로 발생

답변

2

를 통해 phpunit을 4.3.1을 사용하고 있습니다. 따라서 조롱 프레임 워크는 그것이 존재하지 않는다고 가정하고 더미 클래스를 만듭니다 (메서드가없는).

조롱하기 전에 원래 수업이 필요합니다.

+0

하, 그래 - 터널 비전을 깨뜨린 덕분에 – HorusKol