由于父applicationContext bean,Junit测试失败

时间:2013-12-12 13:06:04

标签: spring maven junit

我的测试用例失败,出现以下错误:

  

引起:org.springframework.beans.factory.BeanCreationException:创建类路径资源[/META-INF/aces-beans.xml]中定义的名为'acesFormFactory'的bean时出错:无法解析对bean'promotionMarshaller'的引用设置构造函数参数时;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为'promotionMarshaller'的bean           在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329)           在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)           在org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:629)           在org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)           在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1049)           在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:953)           在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)           在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)

现在这是我的测试类:

    @WebAppConfiguration
@ContextConfiguration(locations = {
        "classpath:/META-INF/aces-beans.xml",
        "classpath:/META-INF/aces-flow-config.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
    DirtiesContextTestExecutionListener.class })
public class ApplicationContextTest {
    @Resource
    private AcesFormFactory acesFormFactory;

    @Test
    public void paymentFormFactoryAvailable() {
        assertThat(acesFormFactory, is(notNullValue()));
        assertThat(acesFormFactory, is(instanceOf(AcesFormFactoryImpl.class)));
    }
}

这里的promotionMarshaller在acesFormFactory中注入了aces-beans.xml中的构造函数arg。 promoteMarshaller的定义存在于webapp-control的ApplicationContext.xml中,它存在于当前组件的pom.xml的依赖列表中。

<dependency>
      <groupId>webapp</groupId>
      <artifactId>webapp-control</artifactId>
    </dependency>
    <dependency>
      <groupId>webapp</groupId>
      <artifactId>webapp-control</artifactId>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>

我不明白为什么在运行Junit测试用例时没有加载父应用程序上下文。请调查一下,因为我现在被困在这里2天了。

这是aces-beans.xml的一个片段:

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


    <bean id="acesFormFactory"
        class="com.company.impl.AcesFormFactoryImpl">
        <constructor-arg ref="checkoutPromotionMarshaller" />
    </bean>

我的环境是Spring 3.2.1,Junit 4,JDK 1.7,Maven 3.0.4

0 个答案:

没有答案