2013-07-22 163 views
1

Fitnesse與Spring MVC的集成有一個問題。Fitnesse的Spring MVC測試

我的用例測試認證:

我有一個通用的燈具,其加載Spring上下文:

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文件)配置。

我固定的代碼是:

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")); 
} 
} 

的問題是,春天是不是能找到任何的WebApplicationContext。

org.springframework.beans.factory.BeanCreationException:錯誤 創建名稱爲 'ma.awb.ebk.bel.web.fixture.authentication.IdentificationUtilisateur' 豆: 注射自動裝配依賴的失敗;嵌套的例外是 org.springframework.beans.factory.BeanCreationException:無法 自動裝配領域:私人 org.springframework.web.context.WebApplicationContext ma.awb.ebk.bel.web.fixture.authentication.IdentificationUtilisateur.webApplicationContext; 嵌套的異常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:否 [org.springframework.web.context.WebApplicationContext]類型的 排位豆找到 依賴性:預期至少1豆,其有資格作爲自動裝配 候選這種依賴性。依賴註釋: {@ org.springframework.beans.factory.annotation.Autowired(必需=真)}

我苗條夾具和我的測試Spring MVC中的唯一區別是,在我的測試MVC,我是在junit上下文中,我在Junit測試中啓用了此註釋:

@WebAppConfiguration 

感謝您的幫助。

回答

0

您在GenericSpringFixture中創建了一個applicationContext,但它不能在IdentificationUtilisateur中自動裝配組件。

@Autowire如果使用@RunWith(SpringJUnit4ClassRunner.class)註釋測試類,但我不確定它是否適用於FitNess類。

也許你需要手動將它們注入:

private WebApplicationContext webApplicationContext = GenericSpringFixture.context() 

UPDATE1(沒有注意到自動裝配Autowired的代碼片段): 看來ClassPathXmlApplicationContext的是不是一個WebAppliactionContext。怎麼樣設置一個XmlWebApplicationContext呢?

+0

GenericSpringFixture中的此行用於啓用註釋===> beanFactory.autowireBeanProperties(this,AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE,true);我可以訪問我的所有服務,Repository,Component Via @Autowired,除了WebApplicationContext – Nabil

+0

GenericSpringFixture。上下文建議沒有奏效,我無法將ClassPathXmlApplicationContext轉換爲WebApplicationContext – Nabil

+0

對不起,我的錯沒有注意到beanFactory.autowireBeanProperties(this,AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE,true); – Hippoom