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