У меня есть определение bean-компонента Spring XML, для которого я хочу написать интеграционные тесты. Определение bean-компонента XML является частью более крупного контекста приложения, в который несколько таких файлов включаются с помощью <import>
. Внутри определения я ссылаюсь на несколько bean-компонентов, которые поступают из других файлов.
Для моего интеграционного теста я хотел бы создать автономный экземпляр определения и использовать макеты Mockito для всех других компонентов. До сих пор я использую что-то вроде этого:
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>
Я хотел бы автоматизировать довольно утомительный раздел насмешек: в идеале я хотел бы, чтобы все bean-компоненты, которые не найдены в контексте приложения, автоматически имитировались. part-to-test.xml
использует @Autowired
, а также bean-компоненты, которые устанавливаются с помощью ссылок на имена. Я использую только файлы определения компонентов XML и не использую ни классы @Configuration
, ни аннотации @Component
.
Я изучил, как использовать пользовательский загрузчик контекста в @ContextConfiguration(loader=...)
, но я еще не нашел подходящей точки расширения для этого. Sprinockito, похоже, не решает эту проблему.
Есть ли какой-то другой проект, который уже решает эту проблему? Если нет, то где бы я расширил Spring для автоматического создания макетов?
@InjectMocks
очень хорошо работает для модульных тестов, то есть для тестирования одного конкретного класса, в котором тест использует имитированные объекты. Однако я хотел бы издеваться над всеми объектами, на которые есть ссылки в определении bean-компонента Spring. Это означает, что мне нужно заполнить контекст приложения Spring моками (возможно, с именем) - я не знаю, как@InjectMocks
помогает в этом. - person nd.   schedule 23.04.2012