【问题标题】:Spring junit test not working春季junit测试不起作用
【发布时间】:2016-04-27 14:05:24
【问题描述】:

我有一个带有 Java 配置类的 Spring (4.2.5) 项目。这些在正常运行项目时工作,但我无法让我的测试工作。在下面的测试中,repo 为空。

@ContextConfiguration(classes = { HibernateConfiguration.class })
public class TestTest {

    @Autowired
    private InstituteRepository repo;

    //some test
}

如果我添加 @RunWith(SpringJUnit4ClassRunner.class) 注释我会得到一个异常

java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotationAttributes(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/String;ZZ)Lorg/springframework/core/annotation/AnnotationAttributes;
    at org.springframework.test.util.MetaAnnotationUtils$AnnotationDescriptor.<init>(MetaAnnotationUtils.java:290)
    at org.springframework.test.util.MetaAnnotationUtils$UntypedAnnotationDescriptor.<init>(MetaAnnotationUtils.java:365)
    at org.springframework.test.util.MetaAnnotationUtils$UntypedAnnotationDescriptor.<init>(MetaAnnotationUtils.java:360)
    at org.springframework.test.util.MetaAnnotationUtils.findAnnotationDescriptorForTypes(MetaAnnotationUtils.java:191)
    at org.springframework.test.util.MetaAnnotationUtils.findAnnotationDescriptorForTypes(MetaAnnotationUtils.java:166)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:274)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.java:110)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:105)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:154)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:145)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

感谢任何帮助。

[编辑]

如果我将 springframework 依赖版本更改为 4.1.3,则测试有效。 4.2.5 需要不同的配置吗? HibernateConfiguration 如下

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = { "myapp.services" })
@EnableJpaRepositories("myapp.repositories")
@Import({ HSQLConfiguration.class, MySQLConfiguration.class })
public class HibernateConfiguration {
}

DataSourcePropertiesHSQLConfigurationMySQLConfiguration 中定义,这是根据活动配置文件选择的。

[编辑 2]

经过更多谷歌搜索后,我找到了this issue,在检查了我的依赖项后,我发现我在 maven 依赖项下有 spring-core-4.1.9 并且我没有在我的 POM 中包含它的依赖项。添加依赖项后,我在 maven 依赖项下看到了 jar,但出现构建路径错误:

Project 'myapp' is missing required library: 'C:\Users\user\.m2\repository\org\springframework\spring-core\4.1.9.RELEASE\spring-core-4.1.9.RELEASE.jar' 

这是我的 POM 文件

<dependencies>
    <!-- spring data -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${springframework.data.version}</version>
    </dependency>
    <!-- spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- annotations -->
    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>jsr250-api</artifactId>
        <version>1.0</version>
    </dependency>
    <!-- spring dep -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <!-- mysql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.connector.version}</version>
    </dependency>
    <!-- hsql -->
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>${hsqldb.version}</version>
    </dependency>
    <!-- test -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    <!-- I added this dependency -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
</dependencies>

具有以下属性

<properties>
    <project.version>0.1</project.version> 
    <junit.version>4.12</junit.version>
    <springframework.version>4.2.5.RELEASE</springframework.version>
    <springframework.data.version>1.10.1.RELEASE</springframework.data.version>
    <hibernate.version>5.1.0.Final</hibernate.version>
    <mysql.connector.version>5.1.31</mysql.connector.version>
    <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
    <hsqldb.version>2.3.2</hsqldb.version>
</properties>

[编辑 3]

构建路径问题似乎与 Eclipse 相关,从命令行运行测试有效!

【问题讨论】:

  • 您的dataSource bean 是否在HibernateConfiguration 类中声明?
  • 我修正了这个错误,但 Spring 4.2.5 仍然无法工作
  • 你能附上maven依赖树吗?询问是否与stackoverflow.com/questions/23789271/…相关问题
  • 我已经添加了 pom 并修复了一个依赖项,但似乎有些东西正在使用旧的依赖项?
  • 可以,使用 mvn dependency:tree 看看谁在使用旧的依赖

标签: java spring junit


【解决方案1】:

如果问题只出在 eclipse 上,你将修复它:项目->清理右键项目:Maven->更新依赖项

【讨论】:

    【解决方案2】:

    尝试使用@Runwith注解:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = { HibernateConfiguration.class })
    public class TestTest {
    
        @Autowired
        private InstituteRepository repo;
    
        //some test
    }
    

    【讨论】:

    • 这首先是导致错误的原因,这是由于spring-core的依赖版本错误引起的
    猜你喜欢
    • 2011-09-26
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2023-03-21
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多