【问题标题】:Spring JUnit Test ErrorSpring JUnit 测试错误
【发布时间】:2012-01-04 10:47:11
【问题描述】:

我在尝试运行 Spring JUnit 测试时收到以下错误。我只是想熟悉使用 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>

错误:

测试错误:
初始化错误(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)

【问题讨论】:

  • 这个 context.xml 文件是否完整?您可以尝试使用稳定版本的 spring 而不是 RC 版本来运行示例吗?我猜ContextLoaderUtils 是一个新类,所以很难追踪错误。
  • 我遇到了同样的问题。当我执行 mvn clean install 时工作..但在 STS 中失败并出现相同的错误.. 3.1.0 RC 出了点问题

标签: spring junit4


【解决方案1】:

从 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.xml 中明确列出每个最高传递依赖项。比如我原本是指望 spring-security-config 引入 spring-core 作为传递依赖,所以我没有在我的 pom.xml 中列出 spring-core 神器。但是为了解决这个问题,我更改了我的 pom 以明确包含 spring-core(版本 3.1.0)。我为我的 pom 中被解析为旧版本的每个已解析的依赖项添加了直接依赖项,然后它就起作用了!

希望这会有所帮助...

【讨论】:

  • 谢谢!明确定义了 spring 所需的依赖项,不再有这个异常!
【解决方案2】:

如果上述解决方案不起作用,则可能是 eclipse 的错: 在eclipse中,在项目上->属性->java构建路径->库->如果有“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 不是解决方案...

【讨论】:

  • 不幸的是,我这样做后错误仍然存​​在......有什么建议吗?
  • @Johannes 清理/构建项目,甚至关闭它,然后关闭 eclipse 并在之后重新打开它们。您是否尝试过其他答案?大多数情况下,这是一个依赖问题,因此您必须检查它们是否得到了很好的解决。检查您是否不依赖仍然引用junit 4的另一个项目。也许在弹出错误的地方放置一个断点并检查真正使用了哪个jar。
  • 感谢您对此的持续关注。我设法通过从我的 POM 中删除所有依赖项来解决这个问题,然后通过 Maven 从 IntelliJ 编译器建议中重新添加它们,然后在我的 java 类中导入这些新添加的类。不知何故,问题就这样解决了……谢谢伙计
【解决方案3】:

在我的情况下,我依赖一个 junit-dep 和一个 junit,当我删除 junit-dep 时,一切正常。

【讨论】:

    【解决方案4】:

    它抱怨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>
    

    我希望您考虑的最后一件事是,您真的、真的需要所有这些依赖项吗?

    【讨论】:

    • 您好,感谢您的帮助,我最终使用了 springframework 版本 3.0.6,并且错误消失了。谢谢您的帮助。仅供参考,这只是一个测试 spring.xml 我的项目将使用 mongoDB,所以我需要大部分依赖项。
    【解决方案5】:

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

    可能对其他依赖项也应该这样做,但如果它没有损坏,请不要修复它;)除非你不能像我一样通过你的强迫症。

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

    谢谢杰!

    【讨论】:

      【解决方案6】:

      将这个添加到你的 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 测试.... 所以我做了这件事。在父母。

      有版本和子版本没有。像这个 org.springframework 春豆

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

      试试看。

      【讨论】:

        猜你喜欢
        • 2012-10-18
        • 2018-06-27
        • 1970-01-01
        • 2021-08-08
        • 2023-03-10
        • 2016-11-30
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        相关资源
        最近更新 更多