我有一个Spring XML bean定义,我想为其编写集成测试。 XML bean定义是更大的应用程序上下文的一部分,其中使用<import>
包含了几个这样的文件。在定义中,我引用了几个来自其他文件的bean。
对于我的集成测试,我想实例化独立定义并对所有其他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 bean定义文件,既不使用@Configuration
类也不使用@Component
注释。
我已经研究了如何在@ContextConfiguration(loader=...)
中使用自定义上下文加载器,但我还没有找到适当的扩展点。 Sprinockito似乎没有解决这个问题。
是否有其他项目已经解决了这个问题?如果没有,我会在哪里扩展Spring以自动创建模拟?
答案 0 :(得分:4)
这是short article with a code example。 BeanDefinitionRegistryPostProcessor
实现为每个缺少bean定义生成一个模拟对象。生成部分使用MocksFactory
完成,此处为an example for such a factory。
答案 1 :(得分:2)
万一有人仍然对这个问题感兴趣,我已经扩展了Yves Martin提到的文章中的代码,继承,支持@Inject等等......并在这里创建了一个Github项目:https://github.com/rinoto/spring-auto-mock