在Fitnesse进行Spring MVC测试

Fitnesse与Spring MVC集成有一个问题。

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

我有一个加载spring上下文的通用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文件正在加载我的plateform的所有依赖关系,这包括我的servlet(Spring Mvc文件)配置。

我的夹具代码是:

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:无法自动装入字段:private org.springframework.web.context.WebApplicationContext ma.awb.ebk.bel.web.fixture.authentication.IdentificationUtilisateur.webApplicationContext; 嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到符合依赖关系的[org.springframework.web.context.WebApplicationContext]类型的限定bean:预计至少有1个bean可以作为此依赖关系的自动连线候选。 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

My Slim fixture和我的测试Spring mvc唯一的区别是在我的测试MVC中,我在junit上下文中,并且在Junit测试中启用了此注释:

@WebAppConfiguration

谢谢你的帮助 。


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

如果你使用@RunWith(SpringJUnit4ClassRunner.class)注释你的测试类,但是我不确定它是否适用于你的FitNess类,@Autowire可以工作。

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

private WebApplicationContext webApplicationContext = GenericSpringFixture.context()

Update1(没注意到autowired代码片段):看来ClassPathXmlApplicationContext不是WebAppliactionContext。 怎么样设置一个XmlWebApplicationContext呢?

链接地址: http://www.djcxy.com/p/67725.html

上一篇: Spring MVC Test In Fitnesse

下一篇: how to proxy an interface using spring like spring data jpa?