java - 使用 @ContextConfiguration 运行 spring 集成测试时,应用程序上下文为 null

标签 java spring maven testing

我正在尝试使用 spring 编写集成测试。下面是测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:**/context*.xml"})
public class MyFirstTestClass {

      @AutoWired
      private ApplicationContext applicationContext;

      @Test
      public void testApplicationContext {
        applicationContext.getName();
      }    
}

当我从 Maven 运行测试时,我得到 NullPointerException因为applicationContextnull .我无法理解原因。同样在日志中,我也没有看到任何错误。我试着把配置 <context:annotation-config/>在其中一个应用程序上下文文件中。我仍然遇到同样的错误。

当我使用 classpath*:**/context*.xml 手动创建上下文时,它起作用了。但我相信当我使用上下文配置时它不会加载应用程序上下文文件。我也没有收到任何错误。 请建议


好的,我设法加载了应用程序上下文。但现在我得到了NoSuchBeanDefinition异常。

bean 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="messageService"
          class="com.mycompany.app.MessageService">
    </bean>    
</beans>                 

测试类

package com.mycompany.app;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import junit.framework.TestSuite;
@ContextConfiguration(locations={"classpath*:*/AppTest.context.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest 
{
    @Autowired
    private ApplicationContext applicationContext;


    public AppTest(  )
    {

    }

    @Test
    public void testApp(){

        assertNotNull(applicationContext);
        for(String str : applicationContext.getBeanDefinitionNames()){
            System.out.println("Bean feifniaio count"+str); 
        }
        applicationContext.getBean("messageService");
    }
}

测试执行后记录

INFO: Refreshing org.springframework.context.support.GenericApplicationContext@196751b: startup date [Fri Nov 20 00:00:11 IST 2015]; root of context hierarchy Bean feifniaio countorg.springframework.context.annotation.internalConfigurationAnnotationProcessor Bean feifniaio countorg.springframework.context.annotation.internalAutowiredAnnotationProcessor Bean feifniaio countorg.springframework.context.annotation.internalRequiredAnnotationProcessor Bean feifniaio countorg.springframework.context.annotation.internalCommonAnnotationProcessor Bean feifniaio countorg.springframework.context.event.internalEventListenerProcessor Bean feifniaio countorg.springframework.context.event.internalEventListenerFactory Bean feifniaio countorg.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor Bean feifniaio countorg.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor

我看不到消息服务 bean。可能是什么问题??

最佳答案

我终于确定了问题所在。我的上下文文件有问题。我在测试的资源文件夹中放置了一个空的上下文文件,maven 将其复制到目标文件夹中。并且实际的上下文文件没有被复制到目标中。由于上下文文件为空,上下文正在初始化,但由于它没有 bean 定义,因此它抛出 NoSuchBeanException。现在我应该强调 ContextConfiguration 在没有抛出任何错误时没有抛出任何错误能够找到位置属性中指定的上下文文件。我认为理想情况下应该这样做。我尝试放置一些虚拟文件路径,这些路径在位置属性中不存在并且没有引发错误。

关于java - 使用 @ContextConfiguration 运行 spring 集成测试时,应用程序上下文为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808762/

相关文章:

java - Mybatis spring改造参数

spring - Keycloak:从内部 docker 容器运行时 token 颁发者无效

java - Windows 上 JavaFX 的 Gluon 客户端 maven 插件无法编译?

java - 无法执行目标 org.apache.maven.plugins :maven-release-plugin:2. 5.3:prepare

java - SpringBootApplication 无法从 application.yml 文件加载属性

java - 从 jsonschema2pojo 生成不应该存在的类生成的 POJO

java - 在 Java 中创建具有给定集合的正值和负值的数组列表

spring - 开箱即用的缓存控制 header 过滤器就可以了吗?

java - 一段时间后,Spring Boot 内存使用率高

java - Eclipse maven build 没有安装依赖