Автоподключение beans, созданный методом фабрики EasyMock?

У меня проблема, которая мне кажется очень странной. У меня есть следующая настройка:

Интерфейс:

package com.example;

public interface SomeDependency {
}

Компонент пружины:

package com.example;

@Component
public class SomeClass {
}

Конфигурация теста пружины с имитируемым bean-компонентом, сгенерированным EasyMock:


    

    
        
     

И модульный тест:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/testconfig.xml")
public class SomeClassTest {

    @Autowired
    SomeClass someClass;

    @Autowired
    SomeDependency someDependency;

    @Test
    public void testSomeClass() throws Exception {
        assertNotNull(someClass);
    }

    @Test
    public void testSomeDependency() throws Exception {
        assertNotNull(someDependency);
    }
}

Проект компилируется и тесты проходят без каких-либо проблем, то есть автоматическое подключение как SomeClass («настоящий» объект), так и SomeDependency (фиктивный объект, созданный EasyMock) будет успешным.

Однако, если я изменю реализация SomeClass для:

@Component
public class SomeClass {

    @Autowired
    SomeDependency someDependency;
}

оба теста завершаются неудачно, потому что

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.example.SomeDependency] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Итак, мои вопросы:

  1. Почему Spring не может автоматически подключать зависимость к SomeClass (когда это удается автоматическое подключение той же зависимости к SomeClassTest )?
  2. Как я могу изменить SomeClassTest или testconfig.xml , чтобы тесты прошли успешно?

Комментарий: На самом деле класс, представленный SomeClass , является частью фреймворка. Следовательно, его нелегко обновить, по крайней мере, в разумные сроки.

Зависимости:

  • Spring: 3.0.5.RELEASE
  • EasyMock: 3.0

Edit:

Начиная с Spring 3.2 RC1, проблема с универсальными фабричными методами и фиктивными объектами была решена .

/ Маттиас

14
задан matsev 7 December 2012 в 20:45
поделиться