如何在Spring上下文中注入模拟

这个问题在这里已经有了答案:

  • 将Mockito嘲笑注入Spring bean 23回答

  • 是的,你在正确的轨道上,在@Configuration类中放置一个模拟@Bean是一种方法,我将描述我的经验:

    诀窍是,您需要纯粹使用一组不同的.xml文件进行测试,这些文件不包括这些bean的实时版本。

    @ContextConfiguration(locations = {"context1-test.xml", "context2-test.xml", ...})
    

    并且“-test-xml”文件进入src/test/resources

    至少那是我在做同样事情的经历。 也许有一些方法可以用模拟版本来“覆盖”bean,但是至今我还没有意识到它。

    我也选择把嘲笑(我有5个)一起放在一个自己的配置中:

    @Configuration
    public class MockServicesProvider {
         @Bean
         public AnotherBean myMock() { return mock(AnotherBean.class); }
    }
    

    这个问题的另一个有趣的部分是initMocks(this);的常见用法initMocks(this); 在你的测试类的@Before方法中。

    如果这些嘲讽正在其他地方使用(并且它们,那就是为什么你initMocks(this)它们连接起来......),那么initMocks(this)会在测试之间将它们吹走(而不是字面意思 - 只是新的嘲讽将被创建,在其他物体上连线的嘲笑将会“丢失”)。

    解决方案是在每次测试之前在@Before方法中调用mockito的reset(mockObject) 。 同样的模拟被重置(所有的when和交互),而不会创建新的模拟。

    请注意, reset的Mockito文档非常严厉地说,除了在通过依赖注入应用模拟的情况下,通常不应该使用这种方法,因为我们确实在这种情况下进行了这项工作:)

    玩的开心!


    这确实是一个重复的

    将Mockito模拟注入到Spring bean中

    Springockito注释正是我所需要的

    https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations

    链接地址: http://www.djcxy.com/p/14393.html

    上一篇: How to inject a Mock in a Spring Context

    下一篇: Role/Purpose of ContextLoaderListener in Spring?