Capture avisos e avisos do PHP durante o teste de unidade

O PHP é ótimo em não dizer se você fez algo errado, e isso geralmente volta para mordê-lo. Isso é válido mesmo ao escrever testes de unidade apropriados, porque avisos e notificações são separados do mecanismo de exceção no PHP e, portanto, pelo menos o PHPUnit não os detectará.

Mas outra regra do PHP também se aplica aqui: geralmente há uma solução alternativa aleatória 🙂 Basta usar um gerenciador de erros personalizado como o seguinte, que lança exceções para avisos, avisos e outros erros “não excepcionais” no PHP:

public function setUp() {
set_error_handler
(function($errno, $errstr, $errfile, $errline) {
throw new RuntimeException($errstr . " on line " . $errline . " in file " . $errfile);
});
}

public function tearDown() {
restore_error_handler
();
}

E é isso, para PHPUnit:

Claro que sua estrutura de teste de unidade deve suportar setUpe tearDownmétodos, e você pode precisar modificar o snippet para trabalhar com sua configuração.

Bom teste!