我的单元测试失败,出现以下错误。是否有任何比较更宽松的方法来让测试通过这些问题?
我不想更明确地指定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)。
答案 0 :(得分:-1)
也许尝试assertTrue():
public void testCode() {
assertTrue(codeUnderTest(-0.000314d).equals("-0.31 mm"));
}