问题描述
为什么我的春季测试设置失败,并出现以下错误信息,但这些信息没有用?感谢所有建议.
Why is my spring test set up failing with the following not-so-useful error messages below? All suggestions are appreciated.
JUnit输出
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
控制台输出
这是目标代码段
@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;
}
}
和测试代码段
@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration( locations={"src/test/resources/PipAppsTest-context.xml"} )
public class PipAppsTest {
@Mock
SitePreferenceHandler sitePreferenceHandler;
@Autowired
PipApps pipApps;
...
}
推荐答案
更新-2015年9月
如果JUnit 4.9不在类路径中,则Spring Framework 4.2.2会引发更有意义的异常.有关详细信息,请参见 SPR-13521 .
Spring Framework 4.2.2 throws a more meaningful exception if JUnit 4.9 is not in the classpath. See SPR-13521 for details.
以下是SpringJUnit4ClassRunner
的类级Javadoc的摘录:
The following is an excerpt from the class-level Javadoc for SpringJUnit4ClassRunner
:
有问题的类MultipleFailureException
在JUnit 4.9中引入.
The class in question, MultipleFailureException
, was introduced in JUnit 4.9.
这就是为什么您的ClassNotFoundException
测试失败的原因.
So that's why your test is failing with the ClassNotFoundException
.
因此,升级到JUnit 4.9(最好是4.12)将解决您的问题.
Upgrading to JUnit 4.9 (or preferably 4.12) will therefore solve your problem.
此致
Sam(Spring TestContext Framework的作者)
Sam (author of the Spring TestContext Framework)
这篇关于为什么使用SpringJUnit4ClassRunner.withAfterClasses方法产生神秘的MultipleFailureException错误消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!