2015-04-08 21 views
5

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.

+2

Belki bir Locale ilişkili sorunlar? – 2Dee

+0

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

+0

Ah, iyi. Kod basitleştirilmiş versiyonudur. Tam sürümde yerel ayarı da ayarlıyorum ... – mach

cevap

-1

Belki assertTrue() deneyin:

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

Bu, sorunu değiştirmez (eşit olmamak kaydıyla). Çıkışı değiştirecek: Sorunun nerede olduğu konusunda artık bir ipucu yok. – Seelenvirtuose