Весенний тест MVC в фитнесе

У меня проблема с интеграцией Fitnesse с Spring MVC.

Мой вариант использования для проверки - аутентификация:

У меня есть общий Fixture, который загружает Spring Context:

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 загружает все зависимости My plateform, включая конфигурацию моего сервлета (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: ошибка при создании bean-компонента с именем «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: для зависимости не найдено подходящего bean-компонента типа [org.springframework.web.context.WebApplicationContext]: ожидается по крайней мере 1 bean-компонент, который квалифицируется как кандидат autowire для этой зависимости. Аннотации зависимостей: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Единственная разница между прибором My Slim и моим тестовым Spring mvc заключается в том, что в моем тестовом MVC я нахожусь в контексте junit, и у меня включена эта аннотация в моем тесте Junit:

@WebAppConfiguration

Спасибо за вашу помощь .


person Nabil    schedule 22.07.2013    source источник


Ответы (1)


Вы создаете applicationContext в GenericSpringFixture, но он не сможет автоматически связывать компоненты в IdentificationUtilisateur.

@Autowire работает, если вы аннотируете свой тестовый класс с помощью @RunWith(SpringJUnit4ClassRunner.class), но я не уверен, что он работает с вашими классами FitNess.

Возможно, вам нужно ввести их вручную:

private WebApplicationContext webApplicationContext = GenericSpringFixture.context()

Update1 (не заметил фрагмент кода с автоматическим подключением): кажется, что ClassPathXmlApplicationContext не является WebAppliactionContext. Как насчет настройки XmlWebApplicationContext вместо этого?

person Yugang Zhou    schedule 22.07.2013
comment
Эта строка в GenericSpringFixture используется для включения аннотации ===›beanFactory.autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); У меня есть доступ ко всем моим службам, репозиторию, компоненту через @Autowired, кроме WebApplicationContext - person Nabil; 22.07.2013
comment
Предложение GenericSpringFixture.context не сработало, я не могу преобразовать ClassPathXmlApplicationContext в WebApplicationContext - person Nabil; 22.07.2013
comment
Извините, моя ошибка не замечена beanFactory.autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); - person Yugang Zhou; 22.07.2013