2011-11-23 128 views
35

我在尝试运行我的Spring JUnit测试时收到以下错误。我只是想熟悉使用Spring框架来创建JUnits。Spring JUnit测试错误

JUnit类:

package org.xxx.springdao.mongo_datadictionary; 

import static org.junit.Assert.*; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationContext; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.xxx.springdao.mongo_datadictionary.SimpleSpringApp; 


@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
public class SpringJunitTest { 


    @Test 
    public void testSpringTest() { 
     SimpleSpringApp test = new SimpleSpringApp(); 
     assertNotNull("Success", test); 
    } 

} 

SpringJunitTest-context.xml中:

<pre> 

    <?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
     xsi:schemaLocation="http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd 
       http://www.springframework.org/schema/data/mongo 
       http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd 
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    </beans> 

</block> 

的pom.xml:

<dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-commons-core</artifactId> 
     <version>1.2.0.BUILD-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.0.0.M5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb-cross-store</artifactId> 
     <version>1.0.0.M5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb-log4j</artifactId> 
     <version>1.0.0.M5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.beans</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.aspects</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongodb-java-driver</artifactId> 
     <version>2.7.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.context</artifactId> 
     <version>3.1.0.RC1</version> 
     <scope>compile</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.core</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.asm</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.aop</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.expression</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.orm</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.transaction</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.test</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 

错误:

Tests in error:
initializationError(org.saic.springdao.mongo_datadictionary.SpringJunitTest): org.springframework.beans.BeanUtils.instantiateClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;

堆栈跟踪:

java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object; 
    at org.springframework.test.context.ContextLoaderUtils.resolveContextLoader(ContextLoaderUtils.java:87) 
    at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:298) 
    at org.springframework.test.context.TestContext.<init>(TestContext.java:100) 
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:117) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:119) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:108) 
    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.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) 
    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) 
+0

这是context.xml文件完整?你可以尝试使用稳定版本的弹簧而不是RC版本运行样本吗?我猜'ContextLoaderUtils'是一个新类,所以很难追踪错误。 – melihcelik

+0

我遇到同样的问题。工作时,我做mvn干净安装..但在STS失败,同样的错误..东西了3.1.0 RC – user48545

回答

56

从Spring 3.0.6版本升级到3.1.0版本时,我遇到了同样的问题。以下是解决方案:

您的一些依赖项被列为3.1.0版本,但他们将其传递依赖关系解析为没有错误消息中列出的方法的旧版本。

如果您使用Eclipse,请打开pom.xml并查看依赖关系层次结构选项卡。您声明的某些库将被列为版本3.1.0,但已解析依赖关系为3.0.6。对我来说,我在我的pom中使用了spring-security-config和spring-security-taglibs,版本为3.1,但他们解决了诸如spring-core和spring-expression之类的依赖关系,它的版本为3.0.6。

要解决这个问题,请明确列出每个最高传递依赖关系明确在您的POM。例如,我最初指望spring-security-config将spring-core作为传递依赖项,所以我没有在我的pom中列出spring-core神器。但为了解决这个问题,我改变了我的pom,明确地包含了spring-core(版本3.1.0)。我添加了直接依赖关系,解决了我的pom中每个已解析的依赖关系,这些依赖关系正在解析为较旧的版本,然后运行!

希望对你有所帮助...

+0

谢谢!明确定义所需的依赖关系,并且不再有这种异常! – whatswrong

0

它抱怨java.lang.NoSuchMethodError,我认为这与你的Spring的依赖做。试着改变你的Spring的依赖这样的:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.1.0.RC1</version> 
     <scope>compile</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-asm</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 

而且我不知道在哪里以下相关从何而来,但我认为他们可能需要修正与他们的artifactId,以及:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.transaction</artifactId> 
     <version>3.1.0.RC1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-commons-core</artifactId> 
     <version>1.2.0.BUILD-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.0.0.M5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb-cross-store</artifactId> 
     <version>1.0.0.M5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb-log4j</artifactId> 
     <version>1.0.0.M5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongodb-java-driver</artifactId> 
     <version>2.7.2</version> 
    </dependency> 

以及一个最终我希望你考虑的事情,你真的需要所有这些依赖吗?

+0

嘿谢谢你的帮助,我最终使用springframework版本3.0.6和错误消失了。谢谢您的帮助。 FYI只是一个测试spring.xml,我的项目将使用mongoDB,所以我需要大部分的依赖关系。 –

0

周杰伦是对的。根据他所说的和来自org.springframework.beans的错误,检查您的项目的依赖关系图并通过排除org.springframework.beans上的传递依赖性并明确声明最新的依赖关系来解决任何版本冲突或正确版本的org.springframework.beans

对其他依赖应该也应该做同样的事情,但是如果它没有被破坏就不要修复它;)除非你不能像我一样通过你的OCD。

我通过选择项目来利用Netbeans,右键单击显示依赖关系。一旦进入依赖关系图视图,搜索Beans。双击依赖项并右键单击以解决版本冲突,其中像窗口这样的向导将提供额外的配置来解决冲突。小菜一碟!

谢谢Jay!

0

添加这样一来你的POM文件,我有同样的错误,但我已经这样做了,现在我的作品,

  <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>3.1.0.RC1</version> 
</dependency> 


    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>3.0.0.RELEASE</version> 
</dependency> 

注:我有POM父,及POM孩子, 和我想测试我的孩子项目,但我得到了错误。 mvn测试.... 所以我做了这件事情。在家长。

with version and in child without。像这样的 org.springframework 弹簧豆

  <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
</dependency> 

尝试。

2

如果上面的解决方案不起作用,它可能是eclipse的错:在eclipse中 ,在项目 - > properties - > java build path - > Librairies - >如果有“Junit 4”,将其删除。

我有这个堆栈跟踪:

java.lang.NoSuchMethodError: org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runLeaf(Lorg/junit/runners/model/Statement;Lorg/junit/runner/Description;Lorg/junit/runner/notification/RunNotifier;)V 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) 

当然更新POM和也不是办法......

+0

不幸的是,我做到这一点后,错误仍然存​​在......有什么建议吗? – Johannes

+0

@Johannes清理/构建项目,甚至关闭它,然后关闭日食并在之后重新打开它们。你有没有尝试过其他的答案?大多数情况下,这是一个依赖性问题,所以你必须检查它们是否被很好地解决。检查是否没有依赖于仍然引用junit 4的另一个项目。也许在出现错误的地方放置一个断点并检查确实使用了哪个jar。 – Asoub

+0

感谢您对此持续的关注。 我设法通过从我的POM中删除所有依赖关系,然后通过Maven从IntelliJ编译器建议中重新添加它们,然后在我的java类中导入这些新添加的类来解决此问题。 不知怎的,这个问题是这样解决的...感谢队友 – Johannes