试图在Spring WebFlow Project的服务级别上运行junit测试。 假设$ AssumptionViolatedException

我试图在Eclipse中使用junit在Eclipse Web Flow Project上运行我的第一个测试,并且还使用mvn测试从控制台运行,但是给了我同样的错误。

java.lang.NoClassDefFoundError:org / junit / Assume $ AssumptionViolatedException

这是我的java代码:

package org.uftwf.memberinquiry.text; import junit.framework.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.uftwf.memberinquiry.model.MemberInquiryInformation; import org.uftwf.memberinquiry.model.MemberRequest; import org.uftwf.memberinquiry.service.MemberInquiryService; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:root-config.xml") public class TestApp { @Autowired private MemberInquiryService service; @Test public void testgetMemeberRequestInformation() { MemberRequest inMemberRequest = new MemberRequest(); MemberInquiryInformation testInfo = service.getMemeberRequestInformation(inMemberRequest); inMemberRequest.setRequestor("cpilling04@aol.com.dev"); Assert.assertEquals(testInfo.getFirst_Name(), "Christine"); Assert.assertEquals(testInfo.getLast_Name(), "Pillings"); } } 

这是我的pox.xml

   4.0.0 org.uftwf.memberinquiry MemberInquiry Member Inquiry war 1.0.0-BUILD-SNAPSHOT   jsmith Johnathan Smith johnatham.smith@uftwf.org  Architect  uftwf.org -5    1.5 3.1.2.RELEASE 2.3.1.BUILD-SNAPSHOT 3.1.2.RELEASE 1.6.6 4.1.1.Final     org.springframework spring-orm ${springframework-version}    org.springframework spring-test 2.5   org.springframework spring-aspects ${springframework-version}   org.springframework spring-webmvc ${springframework-version}   commons-logging commons-logging     org.springframework.webflow spring-faces ${springwebflow-version}   org.springframework.security spring-security-core ${springsecurity-version}   org.springframework.security spring-security-config ${springsecurity-version}   org.springframework.security spring-security-web ${springsecurity-version}   org.springframework.security spring-security-ldap ${springsecurity-version}   org.springframework.security spring-security-cas ${springsecurity-version}   org.springframework.security spring-security-cas-client 3.0.7.RELEASE   cas-client-core org.jasig.cas     javax.transaction jta 1.1   javax.mail mail 1.4.5   cglib cglib 2.2.2   mysql mysql-connector-java 5.1.21   c3p0 c3p0 0.9.1.2   org.apache.httpcomponents httpcore 4.2.1   org.apache.httpcomponents httpclient 4.2.1   commons-logging commons-logging     org.aspectj aspectjtools 1.6.2   jstl jstl 1.2    org.slf4j slf4j-ext ${org.slf4j-version}   org.slf4j slf4j-log4j12 ${org.slf4j-version}   org.slf4j slf4j-api ${org.slf4j-version}   org.slf4j jcl-over-slf4j ${org.slf4j-version}   log4j log4j 1.2.16    javax.inject javax.inject 1    javax.servlet servlet-api 2.5 provided   javax.servlet.jsp jsp-api 2.1 provided   javax.servlet jstl 1.2    com.sun.faces jsf-api 2.1.7   com.sun.faces jsf-impl 2.1.7    javax.validation validation-api 1.0.0.GA    org.hibernate hibernate-entitymanager ${hibernate.version}   org.hibernate hibernate-validator 4.0.2.GA   org.hibernate hibernate-validator 4.0.2.GA    junit junit 4.7 test      org.springframework.maven.snapshot Spring Maven Snapshot Repository http://maven.springframework.org/snapshot  false   true     org.springframework.maven.milestone Spring Maven Milestone Repository http://maven.springframework.org/milestone  false     org.jboss.repository.releases JBoss Maven Release Repository https://repository.jboss.org/nexus/content/repositories/releases  false     maven2-repository.dev.java.net Java.net Repository for Maven http://download.java.net/maven/2/  false        org.codehaus.mojo tomcat-maven-plugin  both    MemberInquiry   

并且最好的部分是我的错误:

 java.lang.NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:281) at org.springframework.test.context.junit4.SpringMethodRoadie$2.run(SpringMethodRoadie.java:207) at org.springframework.test.context.junit4.SpringMethodRoadie.runBeforesThenTestThenAfters(SpringMethodRoadie.java:254) at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:234) at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:204) at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:146) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:151) at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:61) at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:54) at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:52) 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:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) ... 18 more 

这是在黑暗中拍摄的 – 但我在spring的论坛上发现了这一点 。 它与您的配置一致 – 您使用的是Spring-test v2.5和Junit 4.7,看起来spring-test v2.5可能只支持Junit v4.4。

尝试降级到JUnit 4.4或升级到spring-test v2.5.6并查看问题是否消失。

我必须保留Spring v2.5,降级到JUnit 4.4才能解决问题。

此外,您将看到Assume $ AssumptionViolatedException隐藏的原始原因;)

仅供参考,转到最新的弹簧测试2.5.6不会改变任何东西。

链接SO: Junit4 + Spring 2.5:断言抛出“NoClassDefFoundError”

我不得不将我的spring-test和junit版本升级到最新版本并且爆炸一切都很好!

我发现spring-test 2.5.x期望org.junit.Assume包含AssumptionViolatedException,但在junit 4.10中它已被移动到org.junit.internal包中。 使用ClassNotFoundException,测试将停止运行(而不是失败)。

我的解决方法是添加我自己的基于4.10的JUnit Assume副本并添加AssumptionViolatedException(来自内部)。 必须首先将此本地副本添加到类路径中,这是IDE和构建工具。

 public class Assume { /* * Ported this from JUnit 4.4 to satisfy spring-test */ public static class AssumptionViolatedException extends org.junit.internal.AssumptionViolatedException { private static final long serialVersionUID = 1L; public AssumptionViolatedException(Object value, Matcher matcher) { super(value, matcher); } } // rest of Assume from JUint 4.10 .... } 

缺点是这个类显然会很快变得陈旧,未来的代码用户可能不知道它存在; 这是未来的失败等待发生。

它也可能不会先加载。 为了缓解这种情况,我添加了一些测试,检查Assume是否先加载,如果没有则发出警告:

 import java.net.URL; public class JUnitSpringTestAssumeOverrideCompatibilityChecker { public static void checkAssumeOverridden() { URL url = Thread.currentThread().getContextClassLoader().getResource("org/junit/Assume.class"); if (!"file".equals(url.getProtocol())) { throw new RuntimeException("Expect local override (1st on classpath) of JUnit 4.10 Assume for spring-test 2.5 compatibility"); } } }