方法产生神秘的MultipleFailureException错

方法产生神秘的MultipleFailureException错

本文介绍了为什么使用SpringJUnit4ClassRunner.withAfterClasses方法产生神秘的MultipleFailureException错误消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么我的春季测试设置失败,并出现以下错误信息,但这些信息没有用?感谢所有建议.

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错误消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-29 20:47