@Autowired, @Component и тестирование - PullRequest
4 голосов
/ 13 июля 2011

Как вы пойдете по поводу интеграции тестирования пружинного приложения, которое настроено на аннотации и отсканировано с компонентами и вообще не имеет конфигурации XML?Я бьюсь о стену с необходимостью замены производственных компонентов тестируемыми компонентами, не прибегая к конфигурации xml или инъекциям отражения во все части @autowired.В моем тесте я хочу использовать ATestImpl, но у меня есть доступ только к C (интеграционное тестирование C).

Как бы вы поступили так?

Ответы [ 5 ]

10 голосов
/ 13 июля 2011

Воспользуйтесь аннотацией @Primary:

@Service
@Primary
public class TestA implements A {
  //...
}

Если существует более одного компонента, реализующего A, Spring предпочтет тот, который аннотирован @Primary.Если вы поместите класс TestA в /src/test/java, он будет выбран только во время выполнения теста, при нормальном контексте запуска Spring не увидит TestA и будет использовать только avaialble AImpl.

2 голосов
/ 13 июля 2011

Используйте выделенный XML-файл контекста пружины, где вы переопределяете AImpl с экземпляром ATestImpl. Конечно, он использует XML, но я не вижу другого решения (кроме переупаковки приложения с вашим ATestImpl аннотированным классом вместо AImpl один)

1 голос
/ 07 ноября 2015

Используя классы конфигурации аннотации Spring, кодируйте методы @Bean для интерфейсов.Конфигурация prod может выполнить компонентное сканирование на высокоуровневом пакете (пакетах), чтобы загрузить объекты prod, и конфигурации теста могут индивидуально указать bean-компоненты для возврата тестовых версий ваших объектов.Это очень хорошо работает для тестирования компонентов, где необходимы ложные вызовы службы и объекты DAO.

1 голос
/ 13 июля 2011

Для теста можно использовать специальное сканирование компонентов, исключающее «нормальный» класс и добавляющее класс теста.

Если у вас есть несколько разных тестовых классов, у них не должно быть @Component Аннотация (или @Service, ...). Вместо этого они должны быть loaded декларацией XML Bean. Таким образом, вы можете иметь разные XML-файлы для разных установок.

<context:component-scan base-package="com.queomedia.sgcrm.base">
    <context:exclude-filter expression="com\.example\.AImpl" type="regex"/>
</context:component-scan>

<bean class="com.example.ATestImpl"/>
1 голос
/ 13 июля 2011

Новые функции Bean Profile в Spring 3.1 устраняют необходимость замены введенных компонентов для тестирования путем определения профилей, например, испытания, производство и т. д.

Ссылка на пост в блоге здесь . Сегодня команда Spring выпустила второй этап Spring 3.1.

...