gpt4 book ai didi

java - 如何让 Spring 使用多个上下文 Autowiring 集成测试类?

转载 作者:IT老高 更新时间:2023-10-28 13:52:53 26 4
gpt4 key购买 nike

我的一个集成测试使用多个 Spring 上下文文件。似乎 Spring 仅从第一个上下文而不是第二个上下文中 Autowiring bean。有谁知道我做错了什么或如何解决这个问题?

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {        "classpath:/META-INF/spring/applicationContext.xml",        "classpath:/META-INF/spring/applicationContext-security.xml"})@Configurablepublic class UserDetailsServiceImplIntegrationTest {    @Autowired    UserDataOnDemand dod;    // @Autowired does not work for this bean from applicationContext-security.xml    UserDetailsService userDetailsService;    @Before    public void setup() {        dod.init();        // workaround for autowiring problem        userDetailsService = (UserDetailsService)ctx.getBean("userDetailsService");    }    @Test    public void testLoadUser() {        UserDetails ud = userDetailsService.loadUserByUsername("david@somewhere.co.za");        Assert.assertEquals("david@somewhere.co.za", ud.getUsername());    }}

我正在使用 Spring 3.0.3。

这是当我取消注释 UserDetailsS​​ervice 的 @Autowired 行时的堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'za.co.acme.app.security.UserDetailsServiceImplIntegrationTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.security.core.userdetails.UserDetailsService za.co.acme.app.security.UserDetailsServiceImplIntegrationTest.userDetailsService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.security.core.userdetails.UserDetailsService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1064)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:374)    at org.springframework.beans.factory.wiring.BeanConfigurerSupport.configureBean(BeanConfigurerSupport.java:140)    at org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect.configureBean(AnnotationBeanConfigurerAspect.aj:59)    at org.springframework.beans.factory.aspectj.AbstractDependencyInjectionAspect.ajc$afterReturning$org_springframework_beans_factory_aspectj_AbstractDependencyInjectionAspect$2$1ea6722c(AbstractDependencyInjectionAspect.aj:89)    at za.co.acme.app.security.UserDetailsServiceImplIntegrationTest.(UserDetailsServiceImplIntegrationTest.java:25)    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:202)

该 bean 肯定存在,因为“按名称”查找有效,并且它的类型正确。

最佳答案

一种解决方法是创建一个新的单个配置文件(我们称之为“test-configuration.xml”),其中包括 applicationContext.xml 和 applicationContext-security.xml。然后您可以在测试中使用这些配置。

测试配置.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<import resource="classpath:/META-INF/spring/applicationContext.xml"/>
<import resource="classpath:/META-INF/spring/applicationContext-security.xml"/>
</beans>

UserDetailsS​​erviceImplIntegrationTest.java:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test-configuration.xml")
@Configurable
public class UserDetailsServiceImplIntegrationTest {
...
}

关于java - 如何让 Spring 使用多个上下文 Autowiring 集成测试类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3413639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com