2015-08-12 11 views
6

po szyderczy obiekt PDO tak:PDO atrapa obiektu brakuje getConnection

class AdProvidersTest extends PHPUnit_Framework_TestCase 
{ 
    public function dataProvider() 
    { 
     $providers = array (
      array (1, '1st', 'desc_1', 101), 
      array (2, '2nd', 'desc_2', 202), 
      array (3, '3rd', 'desc_3', 303) 
     ); 

     return $providers; 
    } 
    /** 
    * @dataProvider dataProvider 
    */ 
    public function testAdProviders_getConnection($id, $name, $desc, $account_id) 
    { 
     $data = array (
      array (
       'id' => $id, 
       'name' => $name, 
       'desc' => $desc, 
       'account_id' => $account_id, 
      ) 
     ); 

     $stmt = $this->getMock('PDOStatement', array ('execute','fetchAll')); 
     $stmt->expects($this->any()) 
      ->method('execute') 
      ->will($this->returnValue(true)); 
     $stmt->expects($this->any()) 
      ->method('fetchAll') 
      ->will($this->returnValue($data)); 

     $pdo = $this->getMock('PDO', array('prepare'), 
      array('sqlite:dbname=:memory'),'PDOMock_' . uniqid(),true); 
     $pdo->expects($this->any()) 
      ->method('prepare') 
      ->will($this->returnValue($stmt)); 


    } 
} 

chcę przetestować połączenie przy użyciu tej funkcji:

 function getDbh() 
     { 
     if ($this->db === null){ 
      $this->db = Slim::getInstance()->db; 
     } 
     return $this->db->getConnection(); 
     } 

ale po skonfigurowaniu bazy danych za pomocą makiety PDO í napotkasz ten błąd, próbując uzyskać połączenie:

PHP Fatal error: Call to undefined method AdProvidersTest::getMockConnection() in /home/al/adserver/adserver/test/classes/AdProvidersTest.php on line 48 

czy istnieje sposób na dodanie tego getConnection funkcja do wyśmiewanej ChNP?

+1

Kiedy wywoływane jest 'getMockConnections()'? Metoda po prostu nie istnieje, ale nie widzę nigdzie w twoim kodzie, gdy zostanie wywołana. Czy zawierałeś tutaj cały kod źródłowy? –

+0

'getMockConnections()' ?? Szukałem i nie mogłem znaleźć żadnej dokumentacji na ten temat, czy możesz wyjaśnić lub odwołać? mówiłem o 'getConnection()' wewnątrz 'getDbh()' –

+0

Po przeczytaniu błędu zobaczysz, że nie można znaleźć metody, którą próbujesz wywołać. Więc przypuszczam, że musisz stworzyć tę metodę. Z drugiej strony, nie widzę nawet, skąd się go woła. Nie jestem zaznajomiony z klasami/API, których używasz, może musisz przyjrzeć się bliżej ich dokumentom. –

Odpowiedz

1

swój błąd, że stany wiadomość Linia 48 w AdProvidersTest.php jest wywołanie metody getMockConnection() w class AdProvidersTest i że nie zdefiniowano metodęgetMockConnection() w class AdProvidersTest

Czy to pomóc ograniczyć się na odpowiedź?

0

Metoda look getMock() wewnątrz musi wywoływać getMockConnection().