【问题标题】:PHPUnit - Failed asserting two strings are equalPHPUnit - 断言两个字符串相等失败
【发布时间】:2020-01-08 18:27:00
【问题描述】:

我有一个单元测试,我正在尝试测试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 €'

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

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

干杯,

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    所以我找到了答案,看起来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);
    }
    

    【讨论】:

    • 非常感谢,我遇到了这个问题,你刚刚解决了?
    猜你喜欢
    • 2017-11-03
    • 2021-03-07
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多