Когда в тестовых сбоях PHPUnit, фактические значения и математические ожидания отображены.
Но когда тест передает, эта информация не отображена.
Как вынудить PHPUnit всегда отобразить ожидаемый и фактический результат утверждения?
Поскольку вы, скорее всего, вызываете утверждения с помощью $ 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 () может не опоздать на ваш вкус. Это не то же самое, что было бы с ошибкой утверждения.
запуск
phpunit --testdox
покажет имя каждого теста. Таким образом, в качестве обходного пути вы могли бы включить ожидаемые и фактические результаты утверждения в имя теста ... тем не менее, это просто обходной только кушень ...
Либо создайте свой собственный класс утверждения и заставьте его вести себя как прокси для фактического класса утверждения и повторять значения перед делегированием фактическое утверждение, например
$this->assertWithLogging('assertion', $expected, $actual, $message);
или переопределить собственный класс PHPUnit (что, на мой взгляд, будет очень сложно), или просто сделайте
$this->assertSame($expected, $actual, $message);
echo "$expected is $actual";
Это тоже не очень красиво, потому что при работе через CLI это приведет к порче вывода. Если вы используете Zend Studio, вы увидите результат на вкладке «Вывод отладки».
Другой способ - использовать TestListeners , но я недостаточно знаю о них, чтобы рассказать вам какие-либо подробности. Похоже, вы можете подключиться к процессу тестирования.
Фактически вы можете просто использовать значение $ message в утверждении ??? метод и введите в это поле все, что хотите. Обычно я использую его, чтобы показать ожидаемые и фактические значения, а также уникальное имя для утверждения (при условии, что у меня их более одного в данном тесте).
Другой вариант - написать собственный Слушатель. Таким образом, вы можете предоставить желаемый результат и оставить утверждения для phpunit. Думаю, это может быть самый простой и наиболее настраиваемый способ сделать это.