В тестируемом действии отсутствует типовой бин типа для бина

Я работаю над проектом Eclipse, используя Tomcat, Maven, Spring, Hibernate и Struts. У нас есть 2 приложения: ядро, содержащее все компоненты (сервисы) и сеть с представлениями действий и т. Д.

Я сделал тесты JUnit для сервисов и решил попробовать сделать некоторые тесты для действий. Вот пример того, что я пытаюсь сделать:

действие

@Action(value = "/modif/register")
@ResultPath("...")
public class A{
    @Autowired
    private ExampleService exampleService;

    public String execute(){
        Example = exampleService.find(...);
        ...
        ...
    }
}

Тестовое задание

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class ATest extends StrutsSpringTestCase {

    @Before
    public void setUp(){
        try {
            super.setUp();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testExecute() throws Exception{
        request.setParameter(...);
        //filling up the request

        ActionProxy proxy = super.getActionProxy("/modif/register");
        A register =    (A) proxy.getAction();
        String result = proxy.execute();
    }

}

конфиг

@Configuration
@ComponentScan(basePackages = {"web","core"} )
public class Config {
  //configuration
}

Каждый раз, когда я пытаюсь запустить этот тест, я получаю эту ошибку на линии ActionProxy proxy = super.getActionProxy("/modif/register");

org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'web.action.A': сбой внедрения зависимостей с автопроводкой; вложенным исключением является org.springframework.beans.factory.BeanCreationException: не удалось автоматически связать поле: public core.service.ExampleService web.action.A.exampleService; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: не найден квалифицирующий компонент типа [core.service.ExampleService] для зависимости: ожидается, что по крайней мере 1 компонент, который квалифицируется как кандидат для автоматического подключения для этой зависимости. Аннотации зависимостей: {@org.springframework.beans.factory.annotation.Autowired(обязательно =true)}

Я получил эту ошибку независимо от того, какой бин я называю. Все они работают в основном приложении и в моем Action, я даже могу вызывать их напрямую в моем тесте без каких-либо ошибок, но каждый раз, когда я пытаюсь запустить тест, происходит сбой.

Кто-нибудь знает, что может выкинуть это исключение?

1 ответ

Решение

BeanCreationException брошен потому что нет ExampleService боб в вашем тестовом контексте. Это может произойти из-за того, что для теста вашего действия не загружен нужный контекст.

Поскольку вы используете JUnit 4, а не StrutsSpringTestCase Вы должны продлить StrutsSpringJUnit4TestCase класс, который будет играть лучше @RunWith(SpringJUnit4ClassRunner.class) и контекстная загрузка.

Другие вопросы по тегам