Psy*_*oMo 6 php phpunit unit-testing
我有一个单元测试,我试图测试NumberFormatter.
我的代码的简化版本是:
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n这会导致失败:
\n\nFailed asserting that two strings are equal.\n--- Expected\n+++ Actual\n@@ @@\n-\'16,66 \xe2\x82\xac\'\n+\'16,66 \xe2\x82\xac\'\nRun Code Online (Sandbox Code Playgroud)\n\n我假设这与欧元符号(可能是字符编码)或字符串中的某种隐藏字节有关,但不太确定如何检查这一点?
\n\n谁能给我一些关于如何调试这个问题的建议,或者可能的原因是什么?
\n\n干杯,
\n\n莫
\n所以我找到了一个答案,看起来NumberFormatter在它的输出中添加了一个不间断的空格(这对货币有意义),更多信息在这里: https: //www.php.net/manual/en/numberformatter.formatcurrency。 php#118304
我能够基于此想出一个解决方案: https ://stackoverflow.com/a/40724830/4161644
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n