使用@ContextConfiguration

时间:2015-11-19 16:03:05

标签: 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手动创建上下文时,它可以工作。但我相信当我使用上下文配置时它没有加载应用程序上下文文件。我也没有收到任何错误。 请建议

好的,我设法加载了应用程序上下文。但现在iam得到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");
    }
}

执行测试后记录

  

信息:刷新   org.springframework.context.support.GenericApplicationContext@196751b:   启动日期[Fri Nov 20 00:00:11 IST 2015];上下文层次结构的根   豆feifniaio   countorg.springframework.context.annotation.internalConfigurationAnnotationProcessor   豆feifniaio   countorg.springframework.context.annotation.internalAutowiredAnnotationProcessor   豆feifniaio   countorg.springframework.context.annotation.internalRequiredAnnotationProcessor   豆feifniaio   countorg.springframework.context.annotation.internalCommonAnnotationProcessor   豆feifniaio   countorg.springframework.context.event.internalEventListenerProcessor   豆feifniaio   countorg.springframework.context.event.internalEventListenerFactory   豆feifniaio   countorg.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor   豆feifniaio   countorg.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor

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

1 个答案:

答案 0 :(得分:0)

最后我发现了这个问题。我的上下文文件存在问题。我在test的resources文件夹中放置了一个空的上下文文件,该文件被maven复制到目标文件夹中。实际的上下文文件没有被复制到target.Because因为空上下文文件上下文被初始化但由于它没有bean定义它抛出NoSuchBeanException.Now我应该突出显示ContextConfiguration没有抛出任何错误,当它不是能够找到location属性中指定的上下文文件。理想情况下,我认为应该这样做。我尝试并放置一些虚拟文件路径,这些路径在位置属性中不存在,并且没有引发错误。