在PHPUnit测试失败时,会显示实际值和期望值。
但是当测试通过时,这些信息并不会显示。
如何强制PHPUnit始终显示期望和实际的断言结果?
在PHPUnit测试失败时,会显示实际值和期望值。
但是当测试通过时,这些信息并不会显示。
如何强制PHPUnit始终显示期望和实际的断言结果?
运行中
phpunit --testdox
将显示每个测试名称。 因此,作为解决方法,您可能可以将期望和实际断言结果合并到测试名称中...尽管这只是一种解决方法...
由于您很可能使用$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);
}
}
我来到这篇文章是想找类似的东西。 我有这个测试用例:
/**
* test routing logic (numbers method returns an array of numbers and expected outputs to test)
* @dataProvider numbers
*/
function testRoute($input,$expected)
{
$route = new Route($input,'',false);
$route->route();
$this->assertEquals($expected,$route->routingResult);
}
我的数字方法如下:
/**
* read pairs of numbers (input <tab> expected) from tests.input separater by tab
* return an array like this: array(array(number1,expected1), array(number2,expected2), ...)
* provide this array to my tests by returning it
*/
function numbers()
{
$testcases = file('tests.input');
$tests = array();
foreach($testcases as $test_case)
{
list($input,$output) = explode("\t",$test_case,2);
$tests[] = array(trim($input),trim($output));
}
return $tests;
}
Starting test 'RouteTest::testRoute with data set #0 ('8596000000', 'rejected (dp not found)x')'.
F
Starting test 'RouteTest::testRoute with data set #1 ('8596000001', 'rejected (rejected by scheme)')'.
.
Starting test 'RouteTest::testRoute with data set #2 ('8596000003', '1599000003')'.
.
除非测试失败,否则它不会告诉您已测试函数的实际结果,但至少您可以看到所有断言的值。
$this->assertWithLogging('assertion', $expected, $actual, $message);
或者覆盖 PHPUnit 的类(我认为这将非常棘手),或者只需执行
$this->assertSame($expected, $actual, $message);
echo "$expected is $actual";
这样做也不太好看,因为在通过CLI运行时会破坏输出。如果您恰好使用Zend Studio,则可以在“Debug Output”选项卡中查看输出。
另一种方法是使用TestListeners,但我对它们了解不够,无法提供详细信息。看起来您可以钩入测试过程。
PHPUnit_Assert
,但我希望有一些命令行开关可以按需使用此功能... - takeshin另一件事可能是编写自己的监听器。这样,您可以提供所需的输出并将断言留给phpunit。我想这可能是最简单和最可定制的方法。
实际上,您可以在assert???方法中直接使用$message值,并在该字段中放置任何内容。我通常使用它来显示预期值和实际值以及断言的唯一名称(假设我在给定的测试中有多个断言)。