JUnit - 格式化字符串的ComparisonFailure

时间:2015-04-08 08:26:05

标签: java android junit

我的单元测试失败,出现以下错误。是否有任何比较更宽松的方法来让测试通过这些问题?

我不想更明确地指定DecimalFormatter但是让测试更加宽容。

junit.framework.ComparisonFailure: expected:<[-]0.31 mm> but was:<[−]0.31 mm>

测试代码

public void testCode() {
    Locale.setDefault(Locale.US);
    assertEquals("-0.31 mm", codeUnderTest(-0.000314d);
}

生成String的代码是

private static final int OFFSET_FRACTION_DIGITS_SI = 2;
private static final double UNIT_MULTIPLIER_SI = 1000d; // 1 m in mm
private static final String UNIT_MM = "mm";

public String codeUnderTest(double value) {

    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(OFFSET_FRACTION_DIGITS_SI);
    df.setMinimumFractionDigits(OFFSET_FRACTION_DIGITS_SI);

    value *= UNIT_MULTIPLIER_SI;

    StringBuilder builder = new StringBuilder();
    builder.append(df.format(value));

    builder.append(" ");
    builder.append(UNIT_MM);

    return builder.toString();
}

更新

更多测试显示,DecimalFormat返回的unicode点是Unicode字符'MINUS SIGN'(U + 2212),而指定为预期的符号是Unicode字符'HYPHEN-MINUS'(U + 002D)。所以我正在寻找一种将这些标志映射到单个unicode点的方法。这同样适用于千字符分隔符,它将是Unicode字符'NO-BREAK SPACE'(U + 00A0),而不是普通的Unicode字符'SPACE'(U + 0020)。

1 个答案:

答案 0 :(得分:-1)

也许尝试assertTrue():

public void testCode() {
     assertTrue(codeUnderTest(-0.000314d).equals("-0.31 mm"));
}