gpt4 book ai didi

java - JUnit - 格式化字符串比较失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:06 26 4
gpt4 key购买 nike

我的单元测试失败并出现以下错误。对于此类问题,有什么比较宽松的方法可以通过测试吗?

我不想更明确地指定 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);
}

生成字符串的代码在哪里

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)。

最佳答案

也许试试 assertTrue() :

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

关于java - JUnit - 格式化字符串比较失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com