1

我对 Fitnesse Integration with Spring MVC 有疑问。

我要测试的用例是身份验证:

我有一个加载 spring Context 的通用 Fixture :

public abstract class GenericSpringFixture extends GenericBelFixture {

protected static AutowireCapableBeanFactory beanFactory;
protected static ClassPathXmlApplicationContext context;

static {
    initSpring();
}

public static void initSpring() {
    if ((context == null) || !context.isActive()) {
        context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-fitnesse-common.xml");
        beanFactory = context.getAutowireCapableBeanFactory();
    }
}

public GenericSpringFixture() {
    beanFactory.autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
}

public static AutowireCapableBeanFactory returnBeanFactory() {
    return beanFactory;
}
}

applicationContext-fitnesse-common.xml 文件正在加载我的平台的所有依赖项,其中包括我的 servlet(Spring Mvc Files) 配置。

我的夹具代码是:

public class IdentificationUtilisateur extends GenericSpringFixture{

@Autowired
private WebApplicationContext webApplicationContext;

@Autowired
private FilterChainProxy springSecurityFilterChain;

private MockMvc mockMvc;

public void seLogerAvecIdentifiantEtMotDePasse(String identifiant,
        String motDePasse) {
    this.mockMvc = MockMvcBuilders
            .webAppContextSetup(this.webApplicationContext)
            .addFilters(this.springSecurityFilterChain).build();
}

public void accesReussi() throws Exception{
    mockMvc.perform(
            post("/j_spring_security_check")
                    .param("j_username", "bilal")
                    .param("j_password", "Pa1234567"));
}
}

问题是 spring 无法找到任何 webApplicationContext 。

org.springframework.beans.factory.BeanCreationException:创建名为“ma.awb.ebk.bel.web.fixture.authentication.IdentificationUtilisateur”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.springframework.web.context.WebApplicationContext ma.awb.ebk.bel.web.fixture.authentication.IdentificationUtilisateur.webApplicationContext;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.context.WebApplicationContext] found for dependency: 预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.

我的 Slim 夹具和我的测试 Spring mvc 之间的唯一区别是,在我的测试 MVC 中,我在一个 junit 上下文中,并且我在我的 Junit 测试中启用了这个注释:

@WebAppConfiguration

谢谢你的帮助 。

4

1 回答 1

0

您在 GenericSpringFixture 中创建了一个 applicationContext,但它无法在 IdentificationUtilisateur 中自动装配组件。

如果您使用 @RunWith(SpringJUnit4ClassRunner.class) 注释您的测试类,@Autowire 有效,但我不确定它是否适用于您的 FitNess 类。

也许您需要手动注入它们:

private WebApplicationContext webApplicationContext = GenericSpringFixture.context()

Update1(没有注意到自动装配的代码片段):似乎 ClassPathXmlApplicationContext 不是 WebAppliactionContext。那么设置一个 XmlWebApplicationContext 怎么样呢?

于 2013-07-22T14:17:27.213 回答