Spring JUnit测试中的自动模拟实例化

nd.*_*nd. 12 spring junit4 mockito

我有一个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() {
  }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我想自动化相当繁琐的模拟部分:理想情况下,我希望自动模拟应用程序上下文中找不到的所有bean.的part-to-test.xml用途@Autowired以及豆类由使用名称引用设置.我只使用XML bean定义文件,既不使用@Configuration类也不使用@Component注释.

我已经研究了如何使用自定义上下文加载器@ContextConfiguration(loader=...),但我还没有找到适当的扩展点.Sprinockito似乎没有解决这个问题.

是否有其他项目已经解决了这个问题?如果没有,我会在哪里扩展Spring以自动创建模拟?

Yve*_*tin 5

这是带有代码示例简短文章。一个BeanDefinitionRegistryPostProcessor实现为每个缺少的bean定义生成一个模拟对象。生成部分是用a完成的MocksFactory,这里是此类工厂的示例