2011-11-23 143 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