2015-05-04 3 views
9

Warum ist mein Federtest-Setup fehlgeschlagen mit den folgenden nicht so nützlichen Fehlermeldungen unten? Alle Vorschläge werden geschätzt.Warum die kryptische MultipleFailureException-Fehlermeldung mit der SpringJUnit4ClassRunner.withAfterClasses-Methode

JUnit Ausgabe

java.lang.NoClassDefFoundError: org/junit/runners/model/MultipleFailureException 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.withAfterClasses(SpringJUnit4ClassRunner.java:188) 
at org.junit.runners.ParentRunner.classBlock(ParentRunner.java:145) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:235) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:163) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.ClassNotFoundException: org.junit.runners.model.MultipleFailureException 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 10 more 

Konsolenausgabe

INFO: org.springframework.test.context.support.DefaultTestContextBootstrapper - Loaded Standard TestExecutionListener Klassennamen von Ort [META-INF /spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springf ramework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] INFO: org.springframework.test.context.support.DefaultTestContextBootstrapper - Konnte nicht instantiieren TestExecutionListener [org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]. Geben Sie benutzerdefinierte Listenerklassen an oder stellen Sie die standardmäßigen Listenerklassen (und ihre erforderlichen Abhängigkeiten) zur Verfügung. Anstoßende Klasse: [org/springframework/transaction/interceptor/TransactionAttribute] INFO: org.springframework.test.context.support.DefaultTestContextBootstrapper - TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener] konnte nicht instanziiert werden. Geben Sie benutzerdefinierte Listenerklassen an oder stellen Sie die standardmäßigen Listenerklassen (und ihre erforderlichen Abhängigkeiten) zur Verfügung. Anstoßende Klasse: [org/springframework/transaction/interceptor/TransactionAttributeSource] INFO: org.springframework.test.context.support.DefaultTestContextBootstrapper - Verwenden von TestExecutionListeners: [or[email protected]76959acc, org.springframework .test.context.support.DependencyInjectionTestExecutionListener @ 57e603e6, org.springfra[email protected]3e0a1e1f]

ist hier, um das Ziel-Schnipsel

@Service 

public class PipApps { 

@Resource(name = "apps") 
private Properties apps; 

@Autowired 
private SitePreferenceHandler sitePreferenceHandler; 

@Autowired 
private PipsTable pipsTable; 

private SitePreference sitePreference; 

private Device device; 

public PipApps(HttpServletRequest request, HttpServletResponse response){ 
    sitePreference = sitePreferenceHandler.handleSitePreference(request, response); 
    device = DeviceUtils.getRequiredCurrentDevice(request); 
} 

public Properties getApps(){ 
    return apps; 
} 

public Device getDevice(){ 
    return device; 
} 

public SitePreference getSitePreference(){ 
    return sitePreference; 
} 

public DeviceRouteTable getPipsTable(){ 
    return pipsTable; 
} 
} 

Und der Test-Snippet

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"src/test/resources/PipAppsTest-context.xml"}) 

public class PipAppsTest { 

@Mock 
SitePreferenceHandler sitePreferenceHandler; 

@Autowired 
PipApps pipApps; 

... 
} 
+0

Was nicht so nützlich ist? Ausgehend vom Stack-Trace verwenden Sie eine nicht kompatible Version von JUnit 4 mit Spring Test. –

+0

Ich habe JUnit 4.7 verwendet. Ich bin jetzt nach deiner Empfehlung gegangen und habe es auf die neueste JUnit-Version 4.12 aufgerüstet. Der Fehler ist nicht mehr aufgetreten. Diese Fehlermeldung ist jedoch kryptisch und daher nicht sehr nützlich. Aber ich nehme an, dass es einen guten Grund für die Unbestimmtheit gibt. – 000

Antwort

22

Update - September 2015

Spring Framework 4.2.2 eine aussagekräftigere Ausnahme auslöst, wenn JUnit 4.9 nicht in dem Classpath ist. Details finden Sie unter SPR-13521.


Der folgende Text ist ein Auszug aus der Klasse-Ebene Javadoc für SpringJUnit4ClassRunner:

HINWEIS: Ab Spring Framework 4.1, diese Klasse erfordert JUnit 4.9 oder höher.

Die betreffende Klasse, MultipleFailureException, wurde in JUnit 4.9 eingeführt.

Deshalb ist Ihr Test mit der ClassNotFoundException fehlgeschlagen.

Das Upgrade auf JUnit 4.9 (oder vorzugsweise 4.12) wird daher Ihr Problem lösen.

Grüße,

Sam (Autor des Frühlings Testcontext Rahmen)

+0

Hallo, ich habe die Junit-Version in meinem Projekt auf 4.9 hochgestuft, aber trotzdem bekomme ich den gleichen Fehler. – Pruthviraj

+0

Wenn Sie eine Nachricht von Spring erhalten, dass JUnit 4.9 erforderlich ist, haben Sie Ihr Projekt nicht erfolgreich auf JUnit 4.9 aktualisiert. Zum Beispiel könnten Sie verschiedene Versionen von JUnit als transitive Abhängigkeiten verwenden. Überprüfen Sie, wie JUnit in Ihr Abhängigkeitsdiagramm gezogen wird. –