PHPunit игнорирует исключения в методе установки - PullRequest
3 голосов
/ 07 июля 2011

Я заметил, что PHPUnit игнорирует исключения, выданные в методе setUp(), и просто запускает тесты, даже когда функция установки выдает исключение.

В приведенном ниже коде исключение будет проигнорировано, приведенный ниже код не будет запущен, а test_method завершится ошибкой, поскольку используется неопределенная переменная.

protected $a;

public function setUp() {
    parent:setUp();
    throw new Exception(); // setup now exits silently.
    $this->a = new A(); // will never run
}

public function testA() {
    $this->assertTrue($this->a->something()); // will exit tests with PHP error, because $this->a === null
}

Я запускаю phpunit через интерфейс командной строки с файлом конфигурации phpunit.xml.

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

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

Throwing Exception - неправильный способ сделать это, в PHPUnit есть специальный метод:

<?php
class DatabaseTest extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
        if (!extension_loaded('mysqli')) {
            $this->markTestSkipped(
              'The MySQLi extension is not available.'
            );
        }
    }

    public function testConnection()
    {
        // ...
    }
}
?>

http://www.phpunit.de/manual/current/en/incomplete-and-skipped-tests.html#incomplete-and-skipped-tests.skipping-tests

2 голосов
/ 07 июля 2011

Невозможно воспроизвести

При запуске скрипта (полный пример ниже) выдается сообщение об ошибке с исключением.

Я предполагаю, что у вас есть проблема в другом местеили может быть старая версия phpunit?Несмотря на это, я не знаю каких-либо изменений в этом фрагменте кода.

Вы могли бы также запускать phpunit из trunk?("3.6") В этом случае обработка класса "Exception", который сам изменился, не может проверить этот случай прямо сейчас, но если это применимо к вам, попробуйте использовать InvalidArgumentException () (только для тестирования) и посмотрите, не изменится ли этовещи.

phpunit test.php
PHPUnit 3.5.13 by Sebastian Bergmann.

E

Time: 0 seconds, Memory: 3.00Mb

There was 1 error:

1) FooTest::testA
Exception: hi

/home/.../test.php:10

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.

Ваш код доступен для выполнения:

<?php

class FooTest extends PHPUnit_Framework_TestCase {


    protected $a;

    public function setUp(){
        parent::setUp();
        throw new Exception('hi'); //setup now exits silently.
        $this->a = new A(); //will never run
    }

    public function testA(){
        $this->assertTrue($this->a->something()); //will exit tests with PHP error, because $this->a === null
    }

}
...