Я только что начал с PHPUnit . Некоторые простые тесты, которые я написал, работают. Итак, в целом PHPUnit запущен и работает. Однако с классом MySQLi что-то не так.
В моем коде это работает нормально. Вот строка:
$this->mysqli = new \mysqli($this->host, $user->getUser(), $user->getPwd(), $this->db);
Когда эта строка анализируется при запуске phpunit, я получаю следующее сообщение об ошибке (, указывающее на эту строку):
PHP Fatal error: Class 'mysqli' not found in /opt/lampp/htdocs/...
Две возможности (, как я это вижу):
1 )Я упускаю некоторые фича/расширение/шаг настройки/что-то еще, связанное с корректной настройкой PHPUnit, работающего с расширением MySQLi.
РЕДАКТИРОВАТЬ
Если я проверю расширение extension_loaded('mysqli')
, оно вернет true
в моем обычном коде. Если я сделаю следующее в тесте, он пропустит тест (, т.е. вернетfalse
):
if (!extension_loaded('mysqli')) {
$this->markTestSkipped(
'The MySQLi extension is not available.'
);
}
/EDIT
2 )Может быть проблема с моим кодом. Я пытаюсь издеваться над объектом пользователя, чтобы установить тестовое соединение. Итак, вот оно:
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);
}
}
Тестируемый класс Connection выглядит следующим образом:
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;
}
}
РЕШЕНИЕ
Все это является/было проблемой установки. Я использую установку XAMPP , которая предоставляет мой PHP. Независимая установка PHPUnit заставляет использовать другую настройку! Итак, в моем браузере (на базе XAMPP )все было в порядке,но в моей командной строке расширение MySQLi вообще отсутствует! Debian предоставляет пакет с именем php5 -mysqlnd . После установки все работает отлично! (за исключением появления других ошибок:-)