确切的字符串值不匹配

时间:2021-06-01 14:54:50

标签: java

我在独立测试中调用以下内容。

此方法的输出为“50 000”。

我已经检查过,没有可以修剪的空间。 (也确实尝试修剪以防万一)。

当我执行相等检查时,测试失败说:

org.junit.ComparisonFailure: 
Expected :50 000
Actual   :50 000

为什么会这样?

这是我的方法。

import java.text.NumberFormat;

public String aaa() {
    String amt = "50000";
    Locale locale = new Locale("sv","SE");
    NumberFormat f = NumberFormat.getInstance(locale);
    amt = f.format(Long.parseLong(amt));
    return amt;
}

这是我的测试用例。

@Test
public void test() {
    assertEquals("50 000", myClass.aaa());
}

我在这里错过了什么?为什么它们不相等?

2 个答案:

答案 0 :(得分:2)

结果中的空格不是普通的空格字符,而是不间断的空格字符。试试这个,看看测试是否成功:

assertEquals("50\u00a0000", myClass.aaa());

答案 1 :(得分:0)

如果你看到第 2 位字符的值为 160,当你查看该值时会发现它是指非换行空格

,当您断言多个断言时,对 Junit4 使用 ErrorCollector 或对 Junit5 使用 assertAll 也是一个好习惯

@Test
public void test() {
    // Arrange
    StringBuilder builder = new StringBuilder();
    builder.append("50").append((char) 160).append("000");

    // Act
    String actual = myClass.aaa();

    // Assert
    assertEquals(6, actual.length());
    assertEquals(builder.toString(), actual);
}