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 :-)