我正在尝试@Autowired
用 Mockito 模拟对象替换一个对象。执行此操作的常用方法是使用 Springockito 使用 xml:
<mockito:mock id="SomeMock" class="com.package.MockInterface" />
目前我正在尝试使用 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
}
我发现了一个名为 Springockito-annotations 的库,它允许您执行以下操作:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=SpringockitoContextLoader.class)
public class MyTestClass {
@Autowired @ReplaceWithMock MockInterface mockObj;
// test code
}
显然,更漂亮:) 唯一的问题是这个上下文加载器不允许我@Configuration
为其他 bean 使用 JavaConfig(如果我这样做,Spring 会抱怨没有与这些自动装配字段匹配的候选者)。
你们知道让 Spring 的 JavaConfig 和 Springockito-annotations 发挥良好作用的方法吗?或者,是否有另一种创建模拟的简写?
作为一个很好的奖励,使用 Springockito 和 xml 配置,我能够模拟出具体的类,而无需为其依赖项提供自动装配候选者(如果有的话)。没有xml这不可能吗?