2011-11-23 41 views
35

Tôi nhận được lỗi sau khi tôi cố chạy thử nghiệm Spring JUnit của mình. Tôi chỉ cố gắng làm quen với việc tạo JUnits bằng cách sử dụng Spring Framework.Lỗi kiểm tra JUnit mùa xuân

JUnit Class:

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> 

Lỗi:

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

Stack Trace:

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

là tập tin context.xml này hoàn toàn? Và bạn có thể thử chạy mẫu với một phiên bản ổn định của mùa xuân chứ không phải là một phiên bản RC? Tôi đoán 'ContextLoaderUtils' là một lớp mới nên rất khó để theo dõi lỗi. – melihcelik

+0

Tôi đang gặp vấn đề tương tự. Làm việc khi tôi làm mvn sạch cài đặt .. nhưng không thành công trong STS với cùng một lỗi .. một cái gì đó với 3.1.0 RC – user48545

Trả lời

56

Tôi gặp vấn đề tương tự khi nâng cấp từ bản phát hành Spring 3.0.6 và 3.1.0. Đây là giải pháp:

Một số phụ thuộc của bạn được liệt kê là phiên bản 3.1.0, nhưng chúng giải quyết các phụ thuộc chuyển tiếp của chúng cho các phiên bản cũ hơn không có phương pháp được liệt kê trong thông báo lỗi.

Nếu bạn sử dụng Eclipse, hãy mở tệp pom.xml và xem tab phân cấp phụ thuộc. Một số thư viện mà bạn khai báo sẽ được liệt kê dưới dạng phiên bản 3.1.0 nhưng có sự phụ thuộc được giải quyết là 3.0.6. Đối với tôi, tôi đã có spring-security-config và spring-security-taglibs được liệt kê là phiên bản 3.1 trong pom của tôi, nhưng chúng đã giải quyết các phụ thuộc như spring-core và spring-expression là 3.0.6.

Để giải quyết điều này, hãy liệt kê rõ ràng từng phụ thuộc transitive cao nhất một cách rõ ràng trong pom của bạn. Ví dụ, tôi đã bắt đầu đếm trên spring-security-config để đưa vào lõi lò xo như là một sự phụ thuộc chuyển tiếp, vì vậy tôi đã không liệt kê các tạo phẩm lõi trong pom của tôi. Nhưng để khắc phục vấn đề này, tôi đã thay đổi pom của mình để bao gồm rõ ràng Spring-Core (phiên bản 3.1.0). Tôi đã thêm các phụ thuộc trực tiếp vào mọi phụ thuộc được giải quyết trong pom của tôi đã được giải quyết cho một phiên bản cũ hơn, và sau đó nó hoạt động!

Hy vọng điều này sẽ giúp ...

+0

Cảm ơn bạn! Phụ thuộc cần thiết được xác định rõ ràng cho mùa xuân và không có ngoại lệ này nữa! – whatswrong

0

Nó phàn nàn về java.lang.NoSuchMethodError và tôi nghĩ rằng điều này đã làm với phụ thuộc vào mùa xuân của bạn. Hãy thử thay đổi phụ thuộc vào mùa xuân của bạn như thế này:

<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> 

Và tôi không biết nơi phụ thuộc sau đây đến từ đâu, nhưng tôi nghĩ rằng họ có thể cần chỉnh với artifactId của họ cũng như:

<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> 

Và một thức điều mà tôi muốn bạn xem xét, bạn có thực sự, thực sự cần TẤT CẢ những phụ thuộc đó không?

+0

Hey cảm ơn sự giúp đỡ, tôi đã kết thúc bằng cách sử dụng phiên bản springframework 3.0.6 và lỗi đã biến mất. Cảm ơn đã giúp đỡ. FYI chỉ là một tệp tin spring.xml thử nghiệm, dự án của tôi sẽ sử dụng mongoDB, vì vậy tôi cần phần lớn các phụ thuộc. –

0

Jay là chính xác. Dựa trên những gì anh ta nói và lỗi có nguồn gốc từ org.springframework.beans, hãy xem lại biểu đồ phụ thuộc của bạn cho dự án đã nói và giải quyết bất kỳ xung đột phiên bản nào bằng cách loại trừ phụ thuộc transitive trên org.springframework.beans và ghi rõ sự phụ thuộc vào hoặc phiên bản chính xác của org.springframework.beans.

Điều tương tự cũng có thể được thực hiện đối với các phụ thuộc khác, nhưng nếu nó không bị hỏng thì không sửa lỗi;) trừ khi bạn không thể vượt qua OCD của bạn, như bản thân tôi.

Tôi đã tận dụng Netbeans bằng cách chọn dự án, nhấp chuột phải-> hiển thị phụ thuộc. Khi ở chế độ xem biểu đồ phụ thuộc, hãy tìm kiếm Đậu. Nhấn đúp chuột vào sự phụ thuộc và nhấn chuột phải để giải quyết xung đột phiên bản, nơi một cửa sổ như cửa sổ sẽ cung cấp các cấu hình bổ sung để giải quyết xung đột. Miếng bánh!

Xin cảm ơn Jay!

0

thêm một này để pom tập tin của bạn, tôi đã có lỗi tương tự, nhưng tôi đã làm điều này, bây giờ nó làm việc cho tôi,

  <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> 

Lưu ý: Tôi có POM phụ huynh, và POM đứa trẻ, và Tôi muốn thử nghiệm dự án của con tôi, nhưng tôi đã gặp lỗi. mvn test .... vì vậy tôi đã làm điều này. trong Parent.

với phiên bản và trẻ em không có. như thế này một org.springframework mùa xuân-đậu

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

thử nó.

2

Nếu các giải pháp trên không hoạt động, nó có thể là lỗi nhật thực: trong nhật thực, trên dự án -> thuộc tính -> đường dẫn xây dựng java -> Librairies -> nếu có "Junit 4", hãy xóa nó.

tôi đã stacktrace này:

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) 

Và tất nhiên việc cập nhật các pom không phải là giải pháp ...

+0

Thật không may, lỗi vẫn còn remais sau khi tôi đã làm điều này ... Bất cứ đề nghị? – Johannes

+0

@Johannes dọn dẹp/xây dựng dự án, thậm chí đóng nó, sau đó đóng nhật thực và mở lại sau. Bạn đã thử các câu trả lời khác chưa? Chủ yếu đây là vấn đề phụ thuộc, vì vậy bạn sẽ phải kiểm tra xem chúng có được giải quyết tốt hay không. Kiểm tra nếu bạn không có một sự phụ thuộc vào một dự án khác mà vẫn tham khảo junit 4. Có thể đặt một điểm ngắt nơi lỗi bật lên và kiểm tra xem jar nào thực sự được sử dụng. – Asoub

+0

cảm ơn bạn đã liên tục chú ý đến điều này. Tôi quản lý để giải quyết vấn đề này bằng cách loại bỏ tất cả các phụ thuộc từ POM của tôi, và sau đó thêm chúng thông qua Maven từ các đề xuất trình biên dịch IntelliJ, và sau đó nhập các lớp mới được thêm vào trong các lớp java của tôi. Bằng cách nào đó, vấn đề đã được giải quyết theo cách này ... Cảm ơn bạn đời – Johannes

Các vấn đề liên quan