spring-测试,groovy 库和限定符标签不兼容
spring-test, groovy library and qualifier tag incompatibility
我正在尝试向现有项目添加一些 groovy 脚本,但我坚持让集成测试正常工作。
我有几个标有 <qualifier />
标签的 bean,用于在测试和生产代码中自动装配。
在我添加 'org.codehaus.groovy:groovy-all:2.4.0' 之后
(也尝试了其他版本)到依赖项,甚至没有任何 groovy 使用,我的集成测试停止工作,但例外:
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 union 与 groovy.
有一些技巧
我可能只是将 'type' 添加到我的限定符中,但这并没有解决问题,因为我有具有相同限定符标签配置的外部依赖项,此外据我所知该属性是可选的。
我很想至少找出这个问题的根源。
我创建了示例项目来重现所描述的问题,如果有任何想法,我将不胜感激:
https://github.com/ametiste/groovy-vs-spring-test
您在 Spring 的测试支持中发现了一个错误。
已在 Spring Framework 4.1.6 和 4.2 RC1
中修复
我已经修复了 Spring Framework 4.1.6(计划于 2015 年 3 月底发布)和 4.2(计划于 2015 年第三季度发布)的错误。更多详情,请参阅 JIRA issue 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 框架的作者)
我正在尝试向现有项目添加一些 groovy 脚本,但我坚持让集成测试正常工作。
我有几个标有 <qualifier />
标签的 bean,用于在测试和生产代码中自动装配。
在我添加 'org.codehaus.groovy:groovy-all:2.4.0' 之后 (也尝试了其他版本)到依赖项,甚至没有任何 groovy 使用,我的集成测试停止工作,但例外:
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 union 与 groovy.
有一些技巧我可能只是将 'type' 添加到我的限定符中,但这并没有解决问题,因为我有具有相同限定符标签配置的外部依赖项,此外据我所知该属性是可选的。
我很想至少找出这个问题的根源。
我创建了示例项目来重现所描述的问题,如果有任何想法,我将不胜感激: https://github.com/ametiste/groovy-vs-spring-test
您在 Spring 的测试支持中发现了一个错误。
已在 Spring Framework 4.1.6 和 4.2 RC1
中修复我已经修复了 Spring Framework 4.1.6(计划于 2015 年 3 月底发布)和 4.2(计划于 2015 年第三季度发布)的错误。更多详情,请参阅 JIRA issue 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 框架的作者)