ZF2 / PHPUnit: Mock a Zend/Db/Adapter/Adapter

26 Views Asked by At

Problem: Not getting mocked DB adapter for use with all dependency Created mock adapter using: $this->getMockBuilder('Zend\Db\Adapter\AdapterInterface')->disableOriginalConstructor()->getMock(); But getting error: Error: Call to a member function createStatement() on null

Model file code:

<?php
namespace App\Model;

use Zend\Db\TableGateway\TableGateway;
use Zend\ServiceManager\Config;
use Zend\Db\TableGateway\Feature\GlobalAdapterFeature;
use Zend\Mvc\MvcEvent;
use Zend\Cache\Storage\Adapter\Redis;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Expression;
use Zend\Db\Sql\Where;

class Product {

    private $_tenantId;
    private $_tableGateway;
    private $_adapter;
    private $_tableName = "product";

    
    public function __construct($tenantid,$adapter){
        $this->_tenantId = $tenantid;
        $this->_adapter = $adapter;
        $this->_tableGateway = new TableGateway($this->_tableName, $this->_adapter);
    }

    public function GetProduct($id,$fields) {
        $select = new Select();
        $select->columns($fields);
        $select->from($this->_tableName);
        $where = new Where();
        $where->equalTo("tenant_id",$this->_tenantId);
        $where->equalTo("product_id",$id);
        $select->where($where);
        $rowset = $this->_tableGateway->selectWith($select);
        $row = $rowset->current();
        return $row;
    }
}

Test case:

<?php
namespace AppTest\Model;

use App\Model\Product;
use PHPUnit\Framework\TestCase;
use RuntimeException;

class ProductTest extends TestCase
{
    

   protected function setUp() : void
    {
   
        $this->mockAdapter = $this->getMockBuilder('Zend\Db\Adapter\AdapterInterface')
                                    ->disableOriginalConstructor()
                                    ->getMock();

        $this->product = new Product(123,$this->mockAdapter);
       
    }
    public function testGetProduct()
    {
        $result = $this->product->GetProduct('SKU-1',array('product_name','product_category'));
       
    }
   
}

Above code is giving below error:

Error: Call to a member function createStatement() on null

0

There are 0 best solutions below