PHPUnit утверждать, что было сгенерировано исключение? - PullRequest
276 голосов
/ 16 апреля 2011

Кто-нибудь знает, существует ли assert или что-то подобное, что может проверить, было ли выброшено исключение в тестируемом коде?

Ответы [ 12 ]

2 голосов
/ 03 октября 2016
/**
 * @expectedException Exception
 * @expectedExceptionMessage Amount has to be bigger then 0!
 */
public function testDepositNegative()
{
    $this->account->deposit(-7);
}

Будьте очень осторожны с "/**", обратите внимание на двойное "*". Запись только «**» (звездочка) приведет к сбою вашего кода. Также убедитесь, что вы используете последнюю версию phpUnit. В некоторых более ранних версиях phpunit @expectedException Exception не поддерживается. У меня был 4.0, и он не работал для меня, мне пришлось обновить до 5.5 https://coderwall.com/p/mklvdw/install-phpunit-with-composer, чтобы обновить с помощью композитора.

0 голосов
/ 26 сентября 2018

Для PHPUnit 5.7.27 и PHP 5.6 и для тестирования нескольких исключений в одном тесте было важно принудительно выполнить тестирование исключений. Использование только обработки исключений для утверждения экземпляра Exception пропустит тестирование ситуации, если исключение не происходит.

public function testSomeFunction() {

    $e=null;
    $targetClassObj= new TargetClass();
    try {
        $targetClassObj->doSomething();
    } catch ( \Exception $e ) {
    }
    $this->assertInstanceOf(\Exception::class,$e);
    $this->assertEquals('Some message',$e->getMessage());

    $e=null;
    try {
        $targetClassObj->doSomethingElse();
    } catch ( Exception $e ) {
    }
    $this->assertInstanceOf(\Exception::class,$e);
    $this->assertEquals('Another message',$e->getMessage());

}
...