PHPUnit: принудительное отображение утверждаемых значений

Когда в тестовых сбоях PHPUnit, фактические значения и математические ожидания отображены.
Но когда тест передает, эта информация не отображена.

Как вынудить PHPUnit всегда отобразить ожидаемый и фактический результат утверждения?

13
задан takeshin 17 March 2010 в 14:53
поделиться

5 ответов

Поскольку вы, скорее всего, вызываете утверждения с помощью $ this-> assert ... () , вы можете просто перезаписать эти методы в своем тестовом примере. Быстрый пример:

class YourTestCase extends PHPUnit_Framework_TestCase {
    ...
    static private $messages = array();
    ...
    static public function assertSame($var1, $var2, $message = '') {
        parent::assertSame($var1, $var2, $message);
        // assertSame() throws an exception if not true, so the following
        // won't occur unless the messages actually are the same
        $success = print_r($var1, true) . ' is the same as '
                 . print_r($var2, true);
        self::$messages = array_merge(self::$messages, array($success));
    }

    static public function tearDownAfterClass() {
        echo implode("\n", self::$messages);
    }
}

Конечно, tearDownAfterClass () может не опоздать на ваш вкус. Это не то же самое, что было бы с ошибкой утверждения.

3
ответ дан 1 December 2019 в 22:22
поделиться

запуск

phpunit --testdox

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

14
ответ дан 1 December 2019 в 22:22
поделиться

Либо создайте свой собственный класс утверждения и заставьте его вести себя как прокси для фактического класса утверждения и повторять значения перед делегированием фактическое утверждение, например

$this->assertWithLogging('assertion', $expected, $actual, $message);

или переопределить собственный класс PHPUnit (что, на мой взгляд, будет очень сложно), или просто сделайте

$this->assertSame($expected, $actual, $message);
echo "$expected is $actual";

Это тоже не очень красиво, потому что при работе через CLI это приведет к порче вывода. Если вы используете Zend Studio, вы увидите результат на вкладке «Вывод отладки».

Другой способ - использовать TestListeners , но я недостаточно знаю о них, чтобы рассказать вам какие-либо подробности. Похоже, вы можете подключиться к процессу тестирования.

2
ответ дан 1 December 2019 в 22:22
поделиться

Фактически вы можете просто использовать значение $ message в утверждении ??? метод и введите в это поле все, что хотите. Обычно я использую его, чтобы показать ожидаемые и фактические значения, а также уникальное имя для утверждения (при условии, что у меня их более одного в данном тесте).

0
ответ дан 1 December 2019 в 22:22
поделиться

Другой вариант - написать собственный Слушатель. Таким образом, вы можете предоставить желаемый результат и оставить утверждения для phpunit. Думаю, это может быть самый простой и наиболее настраиваемый способ сделать это.

0
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: