Ответ 1
Вот короткая статья с примером кода. Реализация BeanDefinitionRegistryPostProcessor
генерирует макет объекта для каждого без определения bean. Часть генерации выполняется с помощью MocksFactory
, здесь пример для такого factory.
У меня есть определение bean bean , для которого я хочу написать тесты интеграции. Определение XML bean является частью более широкого контекста приложения, в которое включено несколько таких файлов с помощью <import>
. Внутри определения я ссылаюсь на несколько beans, которые поступают из других файлов.
Для моего теста интеграции я хотел бы создать экземпляр отдельного определения и использовать Mockito mocks для всех остальных beans. До сих пор я использую что-то вроде этого:
FooIntegrationTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FooIntegrationTest {
@Autowired private ClassUnderTest underTest;
@Autowired private MockedClass mock;
@Test
public void testFoo() {
}
}
FooIntegrationTest-context.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="part-to-test.xml" />
<bean id="mockedClassReferencedByName" class="org.mockito.Mockito" factory-method="mock" c:classToMock="SomeMockedClass" />
<bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="OtherMockedClassReferencedByType" />
<bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="MockedClass" />
...
</beans>
Я хотел бы автоматизировать довольно утомительный издевательский раздел: в идеале я бы хотел, чтобы все beans, которые не были найдены в контексте приложения, были издевательскими автоматически. В part-to-test.xml
используются @Autowired
, а также beans, которые задаются с помощью ссылок на имена. Я использую только файлы описания XML bean и не использую @Configuration
классы и @Component
аннотации.
Я рассмотрел, как использовать пользовательский загрузчик контекста в @ContextConfiguration(loader=...)
, но я еще не нашел подходящую точку расширения для этого. Sprinockito, похоже, не обращает внимания на эту проблему.
Есть ли другой проект, который уже решает эту проблему? Если нет, то где бы я мог расширить Spring, чтобы автоматически создавать mocks?
Вот короткая статья с примером кода. Реализация BeanDefinitionRegistryPostProcessor
генерирует макет объекта для каждого без определения bean. Часть генерации выполняется с помощью MocksFactory
, здесь пример для такого factory.
На всякий случай кого-то интересует этот вопрос, я расширил код в статье, упомянутой Yves Martin с наследованием, поддержкой @Inject и т.д., и создал здесь проект Github: https://github.com/rinoto/spring-auto-mock