2015-09-29 7 views
2

Так что я создал набор тест службы:Mocking услуги, которые вызывает функцию Зенд дб и функция сброса()

class FMaiAffaireServiceTest extends TestCase 
{ 
    /** 
    * @var MyService 
    */ 
    private $myService; 
    private $typeaffaireTable; 

    private $mockDriver; 
    private $mockConnection; 
    private $mockPlatform; 
    private $mockStatement; 
    private $adapter; 
    private $sql; 

    public function setUp() 
    { 
     $this->mockDriver = $this->getMock('Zend\Db\Adapter\Driver\DriverInterface'); 
     $this->mockConnection = $this->getMock('Zend\Db\Adapter\Driver\ConnectionInterface'); 
     $this->mockDriver->expects($this->any())->method('checkEnvironment')->will($this->returnValue(true)); 
     $this->mockDriver->expects($this->any())->method('getConnection')->will($this->returnValue($this->mockConnection)); 
     $this->mockPlatform = $this->getMock('Zend\Db\Adapter\Platform\PlatformInterface'); 
     $this->mockStatement = $this->getMock('Zend\Db\Adapter\Driver\StatementInterface'); 
     $this->mockDriver->expects($this->any())->method('createStatement')->will($this->returnValue($this->mockStatement)); 
     $this->adapter = new Adapter($this->mockDriver, $this->mockPlatform); 
     $this->sql = new Sql($this->adapter); 

     $mockTableGateway = $this->getMock('Zend\Db\TableGateway\TableGateway', array(), array(), '', false); 

     $maiAffaireTable = $this->getMockBuilder('Maintenance\Model\BDD\FMaiAffaireTable') 
           ->setMethods(array()) 
           ->setConstructorArgs(array($mockTableGateway, $this->adapter, $this->sql)) 
           ->getMock(); 

     $stub = $this->returnValue(new ResultSet()); 
     $maiAffaireTable->expects($this->any())->method('listAffaires')->will($stub); 


     $this->myService = new FMaiAffaireService(
      $maiAffaireTable 
     ); 
    } 

    public function testListAffaires() 
    { 
     $this->myService->listAffaires(1,10); 
    } 
} 

Моя служба выглядит так, это вызов моей функции Zend Db:

class FMaiAffaireService 
{ 
    private $maiAffaireTable; 


    public function __construct(
     $maiAffaireTable, 
    ) { 
     $this->maiAffaireTable  = $maiAffaireTable; 
    } 

    public function listAffaires($iOffset, $iLimit) { 
     $aResults = $this->maiAffaireTable->listAffaires($iOffset, $iLimit); 
     return $aResults->toArray(); 
    } 
} 

А вот пример моей функции Zend DB:

class FMaiAffaireTable 
{ 
    protected $tableGateway; 
    protected $adapter; 
    protected $sql; 

    public function __construct(
     TableGateway $tableGateway, 
     Adapter $adapter, 
     Sql $sql 
    ) { 
     $this->tableGateway = $tableGateway; 
     $this->adapter  = $adapter; 
     $this->sql   = $sql; 
    } 

    public function listAffaires($iOffset, $iLimit) 
    { 
     try { 
      $resultSet = $this->tableGateway->select(
       function (Select $select) use (
        $iOffset, 
        $iLimit 
       ) { 
        $select->offset($iOffset); 
        $select->limit($iLimit); 
       } 
      ); 
      return $resultSet; 
     } catch (\Exception $e) { 
      throw new \Exception($e); 
     } 
    } 
} 

И есть большая проблема с выполняемым социологическое загрязнение из PHPUnit:

1) Каталоги \ FMaiAffaireServiceTest :: Восстановление testListAffaires() ожидает параметр 1, чтобы быть массивом, нуль данный

Я не называю сброса() ANYWHERE! Это проблема ... Я думаю, что это функция PDO, но ... Я немного потерян.

Спасибо.

ответ

1

Проблема здесь

$stub = $this->returnValue(new ResultSet()); 
$maiAffaireTable->expects($this->any())->method('listAffaires')->will($stub); 

неинициализированного ResultSet не будет иметь источник данных, работает ToArray() на нем (как вы делаете в вашей службе) будет первым попытаться сбросить источник данных, который будет быть нулевым.

Попробуйте

$resultSet = new ResultSet(); 
$resultSet->initialize(array()); 
$stub = $this->returnValue($resultSet); 
+0

Спасибо большое, это работает! :) – Amelie