Birim testlerim aşağıdaki hatayla başarısız oluyor. Testin bu tür konular için geçmesini sağlamak için daha fazla hoşgörüyü karşılaştırmanın herhangi bir yolu var mı?JUnit - Karşılaştırma Biçimlendirilmiş dizgideki bozukluk
DecimalFormatter'ı daha açık bir şekilde belirtmek istemiyorum, ancak testi daha fazla affettirmek istiyorum.
junit.framework.ComparisonFailure: expected:<[-]0.31 mm> but was:<[−]0.31 mm>
dize üreten kodu test kodu
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();
}
güncelle:
fazla test Unicode noktası DecimalFormat tarafından döndürülen ortaya Unicode Karakteri 'MINUS SIG N '(U + 2212) beklendiği gibi belirtildiğinde Unicode Karakter' HYPHEN-MINUS '(U + 002D)' dir. Bu yüzden bu tür işaretleri tek bir unicode noktasına eşlemek için bir yol arıyorum. Aynı şey, Unicode Karakteri 'NO-BREAK SPACE' (U + 00A0) olacak ve normal Unicode Karakteri 'SPACE' (U + 0020) 'nin aksine bin ayırıcı için de geçerlidir.
Belki bir Locale ilişkili sorunlar? – 2Dee
Kodunuzu denedim ve hatayı almadım, bu yüzden 2Bee'nin (Locale.setDefault (Locale.ENGLISH) ekledim) yerel bir sorun olmadığını, çünkü sonuçta ilk olarak 0,31 olduğumu anladım. sistem varsayılan fransızca yerel neden) – jMounir
Ah, iyi. Kod basitleştirilmiş versiyonudur. Tam sürümde yerel ayarı da ayarlıyorum ... – mach