2010-11-18 2 views
0

간단한 Datamapper 클래스에 대한 테스트를 작성했지만 테스트가 실패했지만 "Fatal error: Call to a member function fetchAll() on a non-object in C:\xampp\htdocs\Call log\tests\model_tests.php on line 13."오류가 발생합니다. 분명히이 작업은 불가능합니다. 그 방법이 효과가 있다는 것을 증명할 수 있기 때문에 그렇습니다. 내가 이렇게하면PHP simpletest tomfoolery. 테스트가 작업 방법을 전달하지 않음

class TestOfCallMapper extends UnitTestCase { 
    function testOfReturnsAll() { 
     $this->createSchema(); 
     $mapper = Callmapper::getInstance(); 
     $results = $mapper->all(); 
     print_r($results); 
    } 

    private function createSchema() { 
     $mapper = CallMapper::getInstance(); 
     $mapper->pdo->exec(file_get_contents('../database/create_schema.sql')); 
    } 

    private function destroySchema() { 
     $mapper = CallMapper::getInstance(); 
     $mapper->pdo->exec(file_get_contents('../database/destroy_schema.sql')); 
    } 
} 

$test = new TestOfCallMapper('Test of CallMapper Methods'); 
$test->run(new HTMLReporter()); 

, 그것은 잘 작동 :

$mapper = CallMapper::getInstance(); 
    $test = $mapper->all(); 
    print_r($test->fetchAll()); 
+0

는 정말 객체 있는지() 또는 인 print_r() $ 테스트를 위해서 var_dump하시기 바랍니다. – oezi

+0

'$ results'의 var_dump 결과가 무엇인지 넣으면 진단하기가 더 쉬울 것입니다 (var_dump는'bool (FALSE)'의 경우에 어떤 것을 출력 할 것입니다) – cwallenpoole

+0

테스트 페이지에 아무 것도 출력하지 않습니다 print_r 또는 var_dump $ 결과를 시도합니다. 다른 페이지에서는 $ test에 대한 모든 데이터베이스 항목을 포함하는 배열을 출력합니다. –

답변

0

function all() { 
    $calls = $this->pdo->query('SELECT * from calls'); 
    return $calls->fetchAll(); 
} 

가 여기 내 테스트 코드입니다 : 여기

는 가정에 erroring 있어요 코드입니다 pdo 쿼리가 분명히 실패하고 있으므로 fetchAll을 false로 호출하려고합니다.

내가 왜 실패했는지 확인할 것입니다.

+0

이 사실을 깨달았지만 다른 페이지에서 올바르게 반환됩니다. 내가 생각할 수있는 유일한 것은 Simpletest가 PDO 쿼리를 실패하게 만드는 것입니다. 왜 또는 어떻게 이런 일이 일어날 지 알 수 없습니다. –

1

PDO 쿼리가 false를 반환하므로 PDO가 아닌 인스턴스와 부울을 반환합니다. 다음과 같이 시도하십시오!

function all() { 
    $calls = $this->pdo->query('SELECT * from calls'); 
    if($calls === false) 
    { 
     throw new Exception("Unable to perform query"); 
    } 
    return $calls->fetchAll(); 
} 

다음 내

당신의 TestOfCallMapper 당신이 할 수 있습니다

function testOfReturnsAll() 
{ 
     $this->createSchema(); 

     $mapper = Callmapper::getInstance(); 
     try 
     { 
      $results = $mapper->all(); 
     }catch(Exception $e) 
     { 
      //Some Logging for $e->getMessage(); 
      return; 
     } 
     //Use $results here   
} 
+0

나는 앞서 가서 비슷한 것을했다. 다음 메시지를 리턴합니다. –

+0

버퍼되지 않은 다른 u 리가 활성 인 동안 u 리를 실행할 수 없습니다. PDOStatement :: fetchAll()을 사용해보십시오. 또는 코드가 mysql에 대해서만 실행될 경우 PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY 특성을 설정하여 쿼리 버퍼링을 사용할 수 있습니다. –

+0

PDO 생성자에 나열된 속성 설정을 시도했습니다. 도움이되지 않았다. –