2015-08-12 1 views
1

Я пытаюсь проверить класс двумя способами. оба взаимодействуют с базой данных, и именно поэтому я пытаюсь работать с PDO mock object. Я не мог найти много документации о насмешливом объекте PDO и работе с ними, но после того, как после одного учебника, который выглядел довольно близко к тому, что мне нужно, у меня закончился PDO-макет, но я не понимаю, как его использовать.phpunit test с PDO mock

сделать вещь просто это мой класс с первым методом я хочу тест:

<?php 
use Slim\Slim; 

class AdProviders { 
    public $providers = null; 

    protected $db = null; 

    function __construct() { 

    } 

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

} 

и в соответствии со схемой БД это то, как я создал объект PDO:

<?php 
require dirname(__FILE__).'/../../src/vendor/autoload.php'; 

class AdProvidersTest extends PHPUnit_Framework_TestCase 
{ 
    public function dataProvider() 
    { 
     return array (
      array (1, '1st', 'desc_1', 11), 
      array (2, '2nd', 'desc_2', 22), 
      array (3, '3rd', 'desc_3', 33), 
     ); 
    } 
    /** 
    * @dataProvider dataProvider 
    */ 
    public function testAdProviders($id, $name, $desc, $account_id) 
    { 
     $data = array (
      array (
       'id' => $id, 
       'name' => $name, 
       'description' => $desc, 
       'account_id' => $account_id 
      ) 
     ); 

     $stmt = $this->getMock('PDOStatement', array ('fetchAll')); 
     $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)); 

    } 
} 

Теперь я действительно потерял, как я должен проверить метод getDbh() ... это правильный способ создания PDO mock для моего теста? , и если да, то как я могу использовать его для тестирования метода?

любого рода руководство будет высоко оценен ... ТНХ

ответ

2

Вы должны вводить этот макет в Сольешь :: GetInstance(), поэтому она плохо использовать одиночка и лучше использовать зависимость шаблон инъекции.

Это своего рода бессмысленная издеваться PDO, где вы не можете изменить PDO в Slim::getInstance()->db

Что вы действительно можете проверить здесь, возвращает ли метод getDbh() экземпляр Connection.

 Смежные вопросы

  • Нет связанных вопросов^_^