Testando exceções

Categoria: PHPUnit
Publicado em 18 de Julho de 2013

Há duas formas de testar por exceções. Uma envolve o uso de anotações no docblock e a outra a chamada do método setExpectedException().

Anotação no docblock

As anotações @expectedException, @expectedExceptionMessage e @expectedExceptionCode podem ser usadas, de forma que não ẽ obrigatório utilizar as três ao mesmo tempo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
class ClasseExcecaoTest extends PHPUnit_Framework_TestCase
{
    /**
     * @expectedException        ArgumentoInvalidoException
     * @expectedExceptionMessage Mensagem correta
     */
    public function testExcecaoPossuiMensagemCorreta()
    {
        throw new ArgumentoInvalidoException('Qualquer mensagem', 10);
    }
 
    /**
     * @expectedException     ArgumentoInvalidoException
     * @expectedExceptionCode 20
     */
    public function testExcecaoPossuiCodigoCorreto()
    {
        throw new ArgumentoInvalidoException('Qualquer mensagem', 10);
    }
}
?>

Ambos os métodos irão gerar 'F', pois apesar da classe de exceção está correta, no primeiro a mensagem está errada e no segundo o código é quem está incorreto.

Método setExpectedException

Este método pode ser usado no lugar das anotações no docblock:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

class ClasseExcecaoTest extends PHPUnit_Framework_TestCase {
 
    public function testExcecao() {
        $this->setExpectedException('ArgumentoInvalidoExcecao');
    }
 
    public function testExcecaoPossuiMensagemCorreta() {
        $this->setExpectedException(
          'ArgumentoInvalidoExcecao', 'Mensagem correta'
        );
        throw new ArgumentoInvalidoExcecao('Qualquer mensagem', 10);
    }
 
    public function testExcecaoPossuiCodigoCorreto() {
        $this->setExpectedException(
          'ArgumentoInvalidoExcecao', 'Mensagem correta', 20
        );
        throw new ArgumentoInvalidoExcecao('Mensagem correta', 10);
    }
 
}
?>

Os três métodos acima gerarão resultado 'F' de falha.


 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados