У меня проблема, которая мне кажется очень странной. У меня есть следующая настройка:
Интерфейс:
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)}
Итак, мои вопросы:
Комментарий: На самом деле класс, представленный SomeClass , является частью фреймворка. Следовательно, его нелегко обновить, по крайней мере, в разумные сроки.
Зависимости:
Edit:
Начиная с Spring 3.2 RC1, проблема с универсальными фабричными методами и фиктивными объектами была решена .
/ Маттиас