spring-test,groovy库和限定符标签不兼容

时间:2015-01-29 10:58:40

标签: spring spring-mvc groovy spring-test

我试图在现有项目中添加一些groovy脚本,我坚持使集成测试工作。 我有几个标有<qualifier />标记的bean,它们用于测试和生产代码中的自动装配。

在我添加'org.codehaus.groovy之后:groovy-all:2.4.0'  (尝试过其他版本)以及依赖关系,甚至没有任何常规用法,我的集成测试停止工作,例外:

    SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@5e5f7983] to prepare test instance [com.dph.groovy.vs.springtest.IntegrationTest@299c9fe7]
    java.lang.IllegalStateException: Failed to load ApplicationContext
        at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:94)
        at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:72)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
        at 
......
    Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unexpected failure during bean definition parsing
    Offending resource: class path resource [spring/app-config.xml]
    Bean 'service'; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Tag 'qualifier' must have a 'type' attribute
    Offending resource: class path resource [spring/app-config.xml]
    Bean 'service'
        at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70)
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:323)

Runnning项目(如果这很重要,则使用jetty 6)不会导致任何问题,所以我认为有一些技巧与spring-test联合使用groovy。

我可能只是在我的限定符中添加'type',但是它没有解决问题,因为我有相同的限定符标签配置的外部依赖项,此外这个属性是可选的,据我所知。

我很想知道这个问题的根源是什么。

我创建了一个示例项目来重现所描述的问题,并会欣赏任何想法: https://github.com/ametiste/groovy-vs-spring-test

1 个答案:

答案 0 :(得分:2)

您在Spring的测试支持中发现了一个错误。

已在Spring Framework 4.1.6和4.2 RC1中修复

我已修复Spring Framework 4.1.6(计划于2015年3月底发布)和4.2(计划于2015年第3季度发布)的此错误。有关详细信息,请参阅JIRA问题SPR-12768

如果您希望在上述版本之前尝试修复,请考虑针对即将发布的每晚快照之一进行构建。

临时解决方案

与此同时,(允许您编辑的XML配置文件)可以通过明确设置type标记中的<qualifier>属性来规避此错误预期的默认值为"org.springframework.beans.factory.annotation.Qualifier"。有关示例,请参阅以下XML配置。

<bean id="foo" class="java.lang.String" c:_="bar">
    <qualifier value="foo" type="org.springframework.beans.factory.annotation.Qualifier" />
</bean>

此致

萨姆 (Spring TestContext Framework的作者)