spring - AnnotatedElementUtils错误 Spring 测试

标签 spring testing dependency-injection annotations

我编写了一个 jUnit 测试,但在执行时出现错误:

java.lang.NoClassDefFoundError: org/springframework/core/annotation/AnnotatedElementUtils
at org.springframework.test.context.MetaAnnotationUtils$AnnotationDescriptor.<init>(MetaAnnotationUtils.java:269)
at org.springframework.test.context.MetaAnnotationUtils$AnnotationDescriptor.<init>(MetaAnnotationUtils.java:257)
at org.springframework.test.context.MetaAnnotationUtils$UntypedAnnotationDescriptor.<init>(MetaAnnotationUtils.java:326)
at org.springframework.test.context.MetaAnnotationUtils.findAnnotationDescriptorForTypes(MetaAnnotationUtils.java:171)
at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:621)
at org.springframework.test.context.DefaultTestContext.<init>(DefaultTestContext.java:93)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:119)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:120)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:109)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
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)

Caused by: java.lang.ClassNotFoundException: org.springframework.core.annotation.AnnotatedElementUtils
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 27 more

我的应用是这样配置的:

My app

我的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("TestDao-context.xml")
public class TestDao {
@Autowired
private Dao test;


@Test
public void test() {
    Dao test = new DaoImpl();
    try {
        test.connect();
        assertTrue(true);
    } catch (UnknownHostException e) {
        e.printStackTrace();
        assertTrue(false);
    }
}
}

我的上下文配置:

    <?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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <!-- Uncomment and add your base-package here:
         <context:component-scan
            base-package="org.springframework.samples.service"/>  -->
<!-- DAO -->
    <!-- MongoFactoryBean instance -->
    <bean id="mongoFactoryBean" class="org.springframework.data.mongodb.core.MongoFactoryBean">
        <property name="host" value="127.0.0.1" />
        <property name="port" value="27017"/>   
    </bean>

    <bean id="mongoDbFactory"
        class="org.springframework.data.mongodb.core.SimpleMongoDbFactory">
        <constructor-arg name="mongo" ref="mongoFactoryBean" />
        <constructor-arg name="databaseName" value="agence_voyage" />
    </bean>

    <bean id="dao" class="dao.daoImpl.DaoImpl">
        <property name="mongoFactory" ref="mongoDbFactory" />
    </bean> 


<!-- Services -->
    <bean id="service"
        class="service.serviceImpl.ServiceImpl">
        <property name="dao"  ref="dao"/>
    </bean>

<!-- Tests -->
    <bean id="testDao" class="testdao.TestDao">
        <property name="test" ref="dao"/>
    </bean>

</beans>

我的 web.xml 配置:

    <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">

    <display-name>AgenceVoyage</display-name>

   <!--
        - Location of the XML file that defines the root application context.
        - Applied by ContextLoaderListener.
    -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/application-config.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!--
        - Servlet that dispatches request to registered handlers (Controller implementations).
    -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/mvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

根据网上的不同教程配置好像不错,但是不知道哪里出错了。

我认为我的测试类没有很好地实现 TestDao-context.xml,因为当我将上下文文件移动到另一个项目时,错误根本没有改变。 此外,我测试了很多不同的方式来配置我的@ContextConfiguration,它没有改变任何东西。

你看到哪里不对了吗?

最佳答案

实际问题是 spring-test 和其他 spring-* jar 版本之间的不一致(可能 3.x.x 和 4.x.x 彼此不兼容。)任何不会遇到此问题的人都可以对所有 spring 依赖项使用相同的 spring 版本.

关于spring - AnnotatedElementUtils错误 Spring 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21181787/

相关文章:

javascript - Angular 模块配置中不断出现注入(inject)错误

java - 具有分页、排序和规范的 JPA

testing - 夹具或测试的隔离模式

c# - 耦合到依赖注入(inject)框架

ruby-on-rails-3 - cucumber + Selenium 的 waitForElement

php - 需要帮助编写 php 测试文件来测试我的 PHP Controller 类

java - 应用程序如何通知 Spring 应用程序上下文在哪里可以找到其构造函数带有 @Inject 注解的类?

java - 在一张表中形成复合键的列实际上在另一张表中作为外键写入实体类

java - 指定 GenericKeyed Pool 的构造函数 Arg ( Apache Commons )

java - 如何手动使 Spring Batch 作业失败?