Вы не видите проблему, потому что вы используете довольно старую версию 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.
Объяснение
Сериализованная строка php содержит NULL BYTES
для обозначения закрытых и защищенных переменных класса.
Строка "MyClassvar3"
действительно "\0MyClass\0var3"
.
Чтобы исправить утверждение:
$this->assertEquals(
"O:7:\"MyClass\":2:{s:13:\"\x00MyClass\x00var3\";N;s:4:\"var1\";N;}",
serialize($m)
);
Использование этого приведет к работе теста.