2016-09-30 3 views
1

Erhalten java.lang.NoClassDefFoundError: org/apache/commons/Protokollierung/Log wie ich mock. Siehe Code @Mock private RestTemplate restTemplate;[JUnit Unit Testfälle]: java.lang.NoClassDefFoundError: org/apache/commons/Protokollierung/Log

Abhängigkeiten wir enthalten

testCompile "org.apache.logging.log4j:log4j-slf4j-impl:2.5" testCompile "org.apache.logging.log4j:log4j-core:2.5" testCompile "org.slf4j:jcl-over-slf4j:1.7.21" testCompile "commons-logging:commons-logging:1.1.1"

Hinweis: Wir verwenden slf4j Protokollierung. Für die tatsächliche Anwendung werden diese Abhängigkeiten vom Tomcat Server aufgelöst.

Antwort

0

Das erste, was Sie beachten müssen ist - "Sie verwenden ein Mock-Objekt" und Mock ist nur ein Platzhalter, es ist kein echtes Objekt. Also müssen Sie sein Verhalten und seine Abhängigkeiten definieren. Die Vorlage ist als Mock definiert. Sie müssen also abhängige Objekte wie den Logger injizieren. Sie können das erreichen, indem er so etwas wie dieses

@RunWith(MockitoJUnitRunner.class) 
public class MyTest { 

@Mock 
Logger logger; 

@InjectMocks 
private RestTemplate restTemplate; 

@Test 
    public void isLoggerGettingCalled() throws Exception { 
     // Your test logic 
} 

} 
0

Ich denke, das ist einer jener seltenen Fällen mit dem Sie verpassen die spezifische Klasse eigentlich nicht tun, aber man zu viele von ihnen. Wenn Sie diese beiden Gläser überprüfen, die Sie importiert:

testCompile "org.slf4j:jcl-over-slf4j:1.7.21" 
testCompile "commons-logging:commons-logging:1.1.1" 

Sie werden sehen, dass sie beide die folgende Klasse in ihnen haben:

org/apache/commons/logging/Log 

Die Classloader diese Vervielfältigung gestoßen und konnte die Klasse nicht geladen werden Definition. Wenn Sie die richtige Kombination von slf4j Gläser suchen, würde ich mit einem dieser beiden Optionen gehen:

slf4j-api-[latest-version].jar 
slf4j-simple-[latest-version].jar 

ODER

slf4j-api-[latest-version].jar 
slf4j-log4j12-[latest-version].jar 
log4j-[latest-version].jar 

Aber am Ende gibt es viele Kombinationen von je nach wählen deine Vorliebe.

+0

Klassenlader stoppen die Suche, wenn die erste Klasse gefunden wurde; Wenn der Klassenpfad für die Laufzeit weiter unten liegt, macht das keinen Unterschied. –

Verwandte Themen