以下脚本演示了文档(在标题注释中),即我无法检测到"expected"和"actual"字符串之间的任何区别:
<?php
/*
$ phpunit MyTest.php
PHPUnit 3.4.0 by Sebastian Bergmann.
F
Time: 0 seconds
There was 1 failure:
1) MyTest::test_print_r
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-O:7:"MyClass":2:{s:13:"MyClassvar3";N;s:4:"var1";N;}
+O:7:"MyClass":2:{s:13:"MyClassvar3";N;s:4:"var1";N;}
.../MyTest.php:41
.../bin/phpunit:54
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
*/
class MyClass {
static protected $var2;
private $var3;
public $var1;
public function foo($item) {
echo $item . "\n";
}
}
class MyTest extends PHPUnit_Framework_TestCase {
function test_print_r() {
$m = new MyClass();
$this->assertEquals(trim('O:7:"MyClass":2:{s:13:"MyClassvar3";N;s:4:"var1";N;}'), trim(serialize($m)));
}
}
Run Code Online (Sandbox Code Playgroud)
您没有看到问题,因为您使用的是相当旧的PHPUnit版本.当前版本是3.6.5,如果你可以,你应该升级.
当字符串包含不可打印的字符时,PHPUnit> 3.6将显示不同的差异.就像这里的情况一样.
这是使用更新版本的输出.关于它失败原因的解释如下:
phpunit
PHPUnit 3.6.5 by Sebastian Bergmann.
F
Time: 0 seconds, Memory: 3.25Mb
There was 1 failure:
1) MyTest::test_print_r
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'O:7:"MyClass":2:{s:13:"MyClassvar3";N;s:4:"var1";N;}'
+Binary String: 0x4f3a373a224d79436c617373223a323a7b733a31333a22004d79436c6173730076617233223b4e3b733a343a2276617231223b4e3b7d
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Run Code Online (Sandbox Code Playgroud)
序列化的php字符串包含NULL BYTES表示私有和受保护的类变量.
字符串"MyClassvar3"真的"\0MyClass\0var3".
修复断言:
$this->assertEquals(
"O:7:\"MyClass\":2:{s:13:\"\x00MyClass\x00var3\";N;s:4:\"var1\";N;}",
serialize($m)
);
Run Code Online (Sandbox Code Playgroud)
使用它将导致测试工作.
| 归档时间: |
|
| 查看次数: |
4646 次 |
| 最近记录: |