Com PHPUnit Class 'mysqli' não foi encontrado

Eu comecei comPHPUnit. Alguns testes simples que escrevi estão funcionando. Então, em geral, o PHPUnit está funcionando. Há algo errado com a classe MySQLi.

No meu código funciona bem. Aqui está a linha:

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

Quando esta linha é analisada rodando phpunit eu recebo a seguinte mensagem de erro (apontando para aquela linha):

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

Duas possibilidades (como eu vejo):

1) Estou faltando alguma etapa de feature / extension / configuration / alguma outra coisa relacionada a uma configuração correta do PHPUnit trabalhando com a extensão MySQLi.

EDITAR

Se eu testar a extensãoextension_loaded('mysqli') ele retornatrue no meu código normal. Se eu fizer o seguinte no Teste, ele ignorará o teste (ou seja, ele retornaráfalse):

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

/EDITAR

2) Pode haver um problema com o meu código. Eu estou tentando zombar de um objeto de usuário para fazer uma conexão de teste. Então aqui está:

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

A classe de conexão testada se parece com isso:

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

SOLUÇÃO

Essa coisa toda é / foi um problema de instalação. Estou usando umXAMPP instalação que fornece meu PHP. InstalandoPHPUnit de forma independente faz com que use uma configuração diferente! Então, no meu navegador (alimentado por XAMPP) tudo estava bem, mas na minha linha de comando a extensão MySQLi estava faltando todos juntos! Debian fornece um pacote chamadophp5-mysqlnd. Tendo isso instalado tudo funciona bem! (exceto outros erros aparecendo :-)

questionAnswers(1)

yourAnswerToTheQuestion