2016-08-05 45 views
0

Ich verwende Logback mit SLF4J (migrieren von log4j) und wenn ich einen Junit-Test ausführen, der fehlschlägt, wird der Grund, warum der Test fehlschlägt, nicht angezeigt (AssertionFailedError: erwartet ist <> aber war <>)Die Junit-Nachricht (erwartet wurde ...) wird nicht in der Konsole mit Logback angezeigt

Alle anderen Protokolle werden ausgeführt.

Meine logback Konfiguration:

<configuration> 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %msg%n</pattern> 
    </encoder> 
    <filter class="com.jle.athleges.logback.TrashFilter"> 
     <logger>org.springframework</logger> 
     <level>ERROR</level> 
    </filter> 
</appender> 

<appender name="TRASH_FILE_APPENDER" 
    class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logs/logback_trash.log</file> 

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>logs/trash.log.%d{yyyy-MM-dd-HH-mm}.log</fileNamePattern> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
</appender> 

<logger name="org.springframework"> 
    <appender-ref ref="TRASH_FILE_APPENDER" /> 
</logger> 

<root level="debug"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="TRASH_FILE_APPENDER" /> 
</root> 

My Unit Test:

@Test 
public void getAllMembers() { 
    log.debug("Start getAllMember"); 

    long sizeBefore = repository.count(); 
    Member a = new Member(); 
    a.setFirstname("aaa"); 
    a.setLastname("hhh"); 
    a.setId(2L); 

    Member b = new Member(); 
    b.setFirstname("aaa"); 
    b.setLastname("hhh"); 
    b.setId(1L); 
    memberService.save(a); 
    memberService.save(b); 

    Assert.assertTrue(memberService.getAll().size() == 0); 
    log.debug("End getAllMember"); 
} 

Wie Sie meinen Dienst Rückkehr mehr als 0 Elemente sehen und mein Test nicht bestanden. So erhalte ich diese Meldung:

java.lang.AssertionError 
    at org.junit.Assert.fail(Assert.java:86) 
    at org.junit.Assert.assertTrue(Assert.java:41) 
    at org.junit.Assert.assertTrue(Assert.java:52) 
    at com.jle.athleges.test.integration.MemberServiceImpTest.getAllMembers(MemberServiceImpTest.java:72) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at ... 

Mit Log4J die Aussage war java.lang.AssertionError < Erwartete 0> wurde < 2>

Auch wenn ich DEBUG statt ERROR, das Ergebnis ist das gleiche .

Ich verstehe nicht, warum der Teil < 0 Erwartete> wurde < 2> nicht angezeigt wird

Dank

+2

Unit-Test-Ausgabe verwendet kein Protokollierungsframework afaik. Dies ist nicht verwandt. Sende deinen Unit Test Code und wir werden uns das ansehen –

+0

Nein, aber in der JUnit View Eclipse denke ich, dass ich erwartet sehen sollte. Und in der Konsole genauso. Nein ? –

+0

ich meinen Zweig wechseln, ohne Logback (so usinf log4j), und wenn ich den Test ausführen (genau das gleiche), I receveive diese Meldung: java.lang.AssertionError: erwartet: <0> aber war: <2> \t bei org.junit .Assert.fail (Assert.java:88) \t bei org.junit.Assert.failNotEquals (Assert.java:834) ... –

Antwort

0

Sie eine boolean behaupten:

Assert.assertTrue(memberService.getAll().size() == 0); 

Der Rahmen nur weiß, dass Sie einen wahren Wert sehen möchten, aber nicht, was die Quelle des Wertes ist. Zu dem Zeitpunkt, zu dem die Assertion aufgerufen wird, wurde memberService.getAll().size() == 0 bereits ausgewertet. Normalerweise ist es eine bessere Idee, spezifischere Behauptungen zu verwenden.

könnten Sie mit

assertEquals(0, memberService.getAll().size()) 

beginnen, dass Sie die Expected <0> was <2> Ausgabe geben würde.

Aber ich persönlich bevorzuge die hamcrest Stil der Behauptungen:

assertThat(memberService.getAll(), is(empty())) 

wo beide is und empty sind statische Importe:

import static org.hamcrest.CoreMatchers.is; 
import static org.hamcrest.collection.IsEmptyCollection.empty; 

Dies stellt sicher, dass sowohl der Testcode und dessen Ausgang sich am besten lesen .

+0

Ho! Ja du hast Recht. Ich ändere irgendwo meinen Test. Vielen Dank. Ich bin alleine, und manchmal vermisse ich, dass ich unter meinen Augen habe ;-) –