Z PHPUnit klasa „mysqli” nie została znaleziona

Właśnie zacząłemPHPUnit. Niektóre proste testy, które napisałem, działają. Ogólnie PHPUnit działa i działa. Jest jednak coś nie tak z klasą MySQLi.

W moim kodzie działa dobrze. Oto linia:

<code>$this->mysqli = new \mysqli($this->host, $user->getUser(), $user->getPwd(), $this->db);
</code>

Gdy ta linia jest analizowana podczas uruchamiania phpunit, otrzymuję następujący komunikat o błędzie (wskazujący na tę linię):

<code>PHP Fatal error:  Class 'mysqli' not found in /opt/lampp/htdocs/...
</code>

Dwie możliwości (jak widzę):

1) Brakuje mi kroku funkcji / rozszerzenia / konfiguracji / czegoś innego związanego z poprawną konfiguracją PHPUnit działającego z rozszerzeniem MySQLi.

EDYTOWAĆ

Jeśli przetestuję rozszerzenieextension_loaded('mysqli') powracatrue w moim normalnym kodzie. Jeśli wykonam następujące czynności w teście, pomija test (tzn. Zwracafalse):

<code>if (!extension_loaded('mysqli')) {
    $this->markTestSkipped(
        'The MySQLi extension is not available.'
    );
}
</code>

/EDYTOWAĆ

2) Może wystąpić problem z moim kodem. Próbuję wyszydzić obiekt użytkownika, aby utworzyć połączenie testowe. Więc tutaj jest:

<code><?php
class ConnectionTest extends \PHPUnit_Framework_TestCase
{
    private $connection;

    protected function setUp()
    {
        $user = $this->getMockBuilder('mysqli\User')
                     ->setMethods(array('getUser', 'getPwd'))
                     ->getMock();
        $user->expects($this->once())
             ->method('getUser')
             ->will($this->returnValue('username'));
        $user->expects($this->once())
             ->method('getPwd')
             ->will($this->returnValue('p@ssw0rd'));

        $this->connection = new \mysqli\Connection($user);
    }

    public function testInternalTypeGetMysqli()
    {
        $actual   = $this->connection->getMysqli();
        $expected = 'resource';

        $this->assertInternalType($expected, $actual);
    }

    protected function tearDown()
    {
        unset($this->connection);
    }
}
</code>

Testowana klasa połączenia wygląda tak:

<code><?php
namespace mysqli;

class Connection
{
    protected $mysqli;
    protected $host = 'localhost';
    protected $db   = 'database';

    public function __construct(\mysqli\User $user)
    {
        $this->mysqli = new \mysqli($this->host, 
                                    $user->getUser(),
                                    $user->getPwd(),
                                    $this->db);
        if (mysqli_connect_errno()) {
            throw new \RuntimeException(mysqli_connect_error());
        }
    }

    public function getMysqli()
    {
        return $this->mysqli;
    }
}
</code>

ROZWIĄZANIE

To wszystko było / było problemem z instalacją. UżywamXAMPP instalacja, która zapewnia mój PHP. InstalowaniePHPUnit niezależnie sprawia, że ​​używa innej konfiguracji! Tak więc w mojej przeglądarce (zasilanej XAMPP) wszystko było w porządku, ale w moim wierszu poleceń brakowało rozszerzenia MySQLi! Debian zawiera pakiet o nazwiephp5-mysqlnd. Po zainstalowaniu wszystko działa dobrze! (z wyjątkiem innych występujących błędów :-)

questionAnswers(1)

yourAnswerToTheQuestion