Spring上下文不会使用@ContextConfiguration初始化,但会使用新的ClassPathXmlApplicationContext进行初始化

时间:2016-02-02 16:14:04

标签: java spring spring-mvc

我是Spring的新手,这是我想要做的事情:

我使用的是基于maven的库,它有自己的Spring上下文和自动连接的字段 它的bean配置文件是src/test/resources/cucumber.xml
我在图书馆里有这样的课程:

@Component
public class ConfigContainer {
   @Value("${lc.service.uri}")
   private String lcServiceUri;
   @Value("${lc.service.port}")
   private Integer lcServicePort;   
   }
}

然后我有一个测试应用程序(基于maven和黄瓜)我想在库中使用自动装配的字段。
我的应用程序的bean配置文件是src/test/resources/cucumber.xml
我使用@RunWith(Cucumber.class)进行黄瓜测试 我有以下maven依赖项:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>1.2.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.2.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-spring</artifactId>
        <version>1.2.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>theInternalLibrary</groupId>
        <artifactId>internal-api-tests</artifactId>
        <version>1.0.15-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
            <exclusion>
                <groupId>info.cukes</groupId>
                <artifactId>cucumber-java</artifactId>
            </exclusion>
            <exclusion>
                <groupId>info.cukes</groupId>
                <artifactId>cucumber-junit</artifactId>
            </exclusion>
            <exclusion>
                <groupId>info.cukes</groupId>
                <artifactId>cucumber-spring</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.1.6.RELEASE</version>
        <scope>test</scope>
    </dependency>
</dependencies>

当我尝试使用ConfigContainer@ContextConfiguration注释将此@Autowired注入我的应用程序时,对象值为null < / p>

@ContextConfiguration(locations = {"classpath:cucumber.xml"})
public class CleanupTest {
   @Autowired
   protected ConfigContainer configContainer;
}

但如果我使用new ClassPathXmlApplicationContext("cucumber.xml")注入它,则会使用预期值正确初始化对象。

public class CleanupTest {
   protected ApplicationContext context = new ClassPathXmlApplicationContext("cucumber.xml");
   private ConfigContainer configContainer = (ConfigContainer)context.getBean("configContainer");
}

请您解释一下为什么会发生这种情况以及如何使用弹簧注释注入现场? 感谢。

2 个答案:

答案 0 :(得分:1)

您需要使用@RunWith(SpringJUnit4ClassRunner.class)注释您的测试类。否则JUnit只使用默认构造函数创建测试类的实例。

答案 1 :(得分:0)

我实际上错过了黄瓜春天的依赖:

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-spring</artifactId>
    <version>1.2.4</version>
    <scope>test</scope>
</dependency>

添加此依赖项后,它可以正常使用spring注释 感谢@Grogi指出我正确的方向。