试图在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"); } } }