尝试使用Spring运行jUnit测试时出现NoSuchFieldError

到目前为止,我有两个测试。一个仅使用jUnit框架即可正常工作。另一个使用spring-test库并在每次尝试运行该异常时创建此异常。有什么想法可能导致问题吗?

Error

java.lang.NoSuchFieldError: NULL

at org.junit.runners.ParentRunner.<init>(ParentRunner.java:48)

at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:59)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:104)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:27)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)

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)

Maven test dependencies

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.7</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${org.springframework.version}</version>

<scope>test</scope>

</dependency>

Dependency tree

[INFO] [dependency:tree {execution: default-cli}]

[INFO] fake:war:1.0-SNAPSHOT

[INFO] +- log4j:log4j:jar:1.2.16:compile

[INFO] +- org.springframework:spring-web:jar:3.0.5.RELEASE:compile

[INFO] | +- aopalliance:aopalliance:jar:1.0:compile

[INFO] | +- org.springframework:spring-beans:jar:3.0.5.RELEASE:compile

[INFO] | +- org.springframework:spring-context:jar:3.0.5.RELEASE:compile

[INFO] | | +- org.springframework:spring-aop:jar:3.0.5.RELEASE:compile

[INFO] | | +- org.springframework:spring-expression:jar:3.0.5.RELEASE:compile

[INFO] | | \- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile

[INFO] | \- org.springframework:spring-core:jar:3.0.5.RELEASE:compile

[INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile

[INFO] +- commons-codec:commons-codec:jar:1.4:compile

[INFO] +- org.glassfish:javax.faces:jar:2.1.3:compile

[INFO] +- org.richfaces.ui:richfaces-components-ui:jar:4.0.0.Final:compile

[INFO] | +- org.richfaces.ui:richfaces-components-api:jar:4.0.0.Final:compile

[INFO] | \- org.richfaces.core:richfaces-core-api:jar:4.0.0.Final:compile

[INFO] +- org.richfaces.core:richfaces-core-impl:jar:4.0.0.Final:compile

[INFO] | +- net.sourceforge.cssparser:cssparser:jar:0.9.5:compile

[INFO] | | \- org.w3c.css:sac:jar:1.3:compile

[INFO] | \- com.google.guava:guava:jar:r08:compile

[INFO] +- org.hibernate:hibernate-validator:jar:4.2.0.Final:compile

[INFO] | \- org.slf4j:slf4j-api:jar:1.6.1:compile

[INFO] +- javax.validation:validation-api:jar:1.0.0.GA:compile

[INFO] +- javax.xml.bind:jaxb-api:jar:2.2.2:compile

[INFO] | +- javax.xml.stream:stax-api:jar:1.0-2:compile

[INFO] | \- javax.activation:activation:jar:1.1:compile

[INFO] +- com.sun.xml.bind:jaxb-impl:jar:2.2.2:compile

[INFO] +- javax.servlet:jstl:jar:1.1.2:compile

[INFO] +- junit:junit:jar:4.7:test

[INFO] +- org.springframework:spring-test:jar:3.0.5.RELEASE:test

[INFO] +- javax.servlet:jsp-api:jar:2.0:provided

[INFO] \- javax.servlet:servlet-api:jar:2.4:provided

回答:

你是否正在使用旧版本的Eclipse(Galileo或更低版本)?还是旧版的junit插件?如果是这样,则可能是问题的原因。ParentRunner正在寻找在JUnit 4.5中引入的Sorter.NULL:

package org.junit.runner.manipulation;

public class Sorter implements Comparator<Description> {

/**

* NULL is a <code>Sorter</code> that leaves elements in an undefined order

*/

public static Sorter NULL= new Sorter(new Comparator<Description>() {

public int compare(Description o1, Description o2) {

return 0;

}});

如果你没有这段代码,则可能使用的是4.5之前的版本。在Eclipse上,执行Ctrl-Shift-T组合键,看看你是否有可用的Sorter类的多个版本,如果有,请确保两个版本都不在4.5之前。另外,在“构建路径”中查看项目设置,如果有JUnit条目(不是Maven版本),请将其删除,然后重试。

编辑:这也可能是由Maven的传递依赖引起的。也许你的一个库依赖于4.5之前的JUnit版本。

以上是 尝试使用Spring运行jUnit测试时出现NoSuchFieldError 的全部内容, 来源链接: utcz.com/qa/418653.html

回到顶部