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

时间:2019-09-05 20:18:34

标签: php unit-testing phpunit

我有一个单元测试,正在尝试测试NumberFormatter的输出。

我的代码的简化版本是:

public function testGetFormattedPrice()
{
    $formatter = NumberFormatter::create(
        "de_DE",
        NumbererFormatter::CURRENCY
    );

    $this->assertEquals(
        '16,66 €',
        $formatter->formatCurrency(16.66, "EUR")
    );
}

这会导致失败:

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'16,66 €'
+'16,66 €'

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

任何人都可以给我一些有关如何调试此问题的建议,或者可能是什么原因?

干杯

Mo

1 个答案:

答案 0 :(得分:2)

所以我找到了一个答案,好像NumberFormatter在其输出中添加了一个不间断的空格(对于货币而言是有意义的),此处提供了更多信息:https://www.php.net/manual/en/numberformatter.formatcurrency.php#118304

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

public function testGetFormattedPrice()
{
    $formatter = NumberFormatter::create(
        "de_DE",
        NumbererFormatter::CURRENCY
    );

    $format = str_replace("\xc2\xa0", ' ', $formatter->formatCurrency(16.66, "EUR"));

    $this->assertEquals('16,66 €', $format);
}