2016-04-13 20 views
1

Ben JUnit System.out.println() kullanarak yazdırılan bir işlevi test ediyorum. Beklenen çıktıyı + \ n alıyorum ve yazdırılanla karşılaştırdım ve test başarısız oluyor. Ancak, S.o.println() ile S.o.print() arasında geçiş yaparsam ve yeni satır karakterini beklenen çıktıya eklemezsem, iyi çalışır. Hata, belki de iki yeni satır eklendiğine benziyor. Ancak, \ n \ n eklenmesi de işe yaramadı.JUnit testi, S.o.println işlevi için beklenen çıktıya n ekledikten sonra bile başarısız oluyor

fonksiyon test edilen:

public void printTime() { 
    String h0 = ""; 
    String m0 = ""; 
    String s0 = ""; 
    if(hour < 10) 
     h0 = "0"; 
    if(min < 10) 
     m0 = "0"; 
    if(sec < 10) 
     s0 = "0"; 

    System.out.println(h0+hour+":"+m0+min+":"+s0+sec); 
} 

testi:

@Test 
public void testPrintTime() { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    System.setOut(new PrintStream(baos)); 

    clock.printTime(); 
    assertEquals("12:00:00\n", baos.toString()); 
} 

hata PrintTime bir println yaparsa

org.junit.ComparisonFailure: expected:<12:00:00[] 
> but was:<12:00:00[ 
] 
> 
+0

Ne "12: 00: 00 \ r \ n" 'bekliyoruz olur'? – derlarsschneider

+0

Bu kodu test etmek için [Sistem Kuralları] 'nı (http://stefanbirkner.github.io/system-rules/)' SystemOutRule 'kullanabilirsiniz. İşletim sistemine bağlı olmayan testler yazmanıza izin veren bir getLogWithNormalizedLineSeparator() yöntemine sahiptir. –

cevap

3

, autoflush tamponlu metni yazacak. Bu zaten yapılmış gibi görünüyor.

Hata: Windows altında "\ r \ n" karşı test edilebilir. deneyin trim() veya ekleme System.getProperty("line.separator")

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
System.setOut(new PrintStream(baos, true)); // Autoflush 
clock.printTime(); 

assertEquals("12:00:00", baos.toString().trim()); 
+0

Bu işe yaradı, teşekkürler! – user2268668