PHPUnit - 断言两个字符串相等失败

Psy*_*oMo 6 php phpunit unit-testing

我有一个单元测试,我试图测试NumberFormatter.

\n\n

我的代码的简化版本是:

\n\n
public function testGetFormattedPrice()\n{\n    $formatter = NumberFormatter::create(\n        "de_DE",\n        NumbererFormatter::CURRENCY\n    );\n\n    $this->assertEquals(\n        \'16,66 \xe2\x82\xac\',\n        $formatter->formatCurrency(16.66, "EUR")\n    );\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会导致失败:

\n\n
Failed asserting that two strings are equal.\n--- Expected\n+++ Actual\n@@ @@\n-\'16,66 \xe2\x82\xac\'\n+\'16,66 \xe2\x82\xac\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我假设这与欧元符号(可能是字符编码)或字符串中的某种隐藏字节有关,但不太确定如何检查这一点?

\n\n

谁能给我一些关于如何调试这个问题的建议,或者可能的原因是什么?

\n\n

干杯,

\n\n

\n

Psy*_*oMo 9

所以我找到了一个答案,看起来NumberFormatter在它的输出中添加了一个不间断的空格(这对货币有意义),更多信息在这里: https: //www.php.net/manual/en/numberformatter.formatcurrency。 php#118304

\n\n

我能够基于此想出一个解决方案: https ://stackoverflow.com/a/40724830/4161644

\n\n
public function testGetFormattedPrice()\n{\n    $formatter = NumberFormatter::create(\n        "de_DE",\n        NumbererFormatter::CURRENCY\n    );\n\n    $format = str_replace("\\xc2\\xa0", \' \', $formatter->formatCurrency(16.66, "EUR"));\n\n    $this->assertEquals(\'16,66 \xe2\x82\xac\', $format);\n}\n
Run Code Online (Sandbox Code Playgroud)\n