使用Spring JavaConfig和@Autowired注入Mockito Mock对象

jab*_*sad 12 java spring integration-testing mockito spring-java-config

我正在尝试@Autowired用Mockito模拟对象替换对象.通常的方法是使用Springockito使用xml:

<mockito:mock id="SomeMock" class="com.package.MockInterface" />
Run Code Online (Sandbox Code Playgroud)

目前我正在尝试使用Spring的JavaConfig来完成这项工作.突然之间,Java表达式比xml更加冗长:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyTestClass {

    @Configuration
    static class Config {
        @Bean
        public MockInterface somethingSpecial() {
            return Mockito.mock(MockInterface.class);
        }
    }

    @Autowired MockInterface mockObj;

    // test code
}
Run Code Online (Sandbox Code Playgroud)

我发现了一个名为Springockito-annotations的库,它允许您执行以下操作:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=SpringockitoContextLoader.class)
public class MyTestClass {

    @Autowired @ReplaceWithMock MockInterface mockObj;

    // test code
}
Run Code Online (Sandbox Code Playgroud)

显然,一大堆漂亮:)唯一的问题是,这种情况下加载程序不会允许我使用@Configuration和JavaConfig其他豆类(如果我这样做,春天抱怨说没有匹配自动连接领域的考生).

你们知道如何让Spring的JavaConfig和Springockito-annotations发挥得更好吗?或者,是否有另一种创建模拟的简写?

作为一个很好的奖励,使用Springockito和xml配置,我能够模拟出具体的类而不为其依赖项提供自动装配候选(如果有的话).没有xml这是不可能的吗?

Jon*_*han 1

似乎SpringockitoContextLoader扩展了GenericXmlContextLoader,其描述为:

AbstractGenericContextLoader 的具体实现,用于从 XML 资源读取 bean 定义。

所以目前您只能使用 xml bean 定义。

您可以编写自己的上下文加载器,从SpringockitoContextLoader类中获取相关部分。看一下这里开始,也许你可以扩展AnnotationConfigContextLoader例如?