Powermockito模拟内部@Autowired类的依赖

时间:2014-03-26 07:51:58

标签: java junit powermock

我在测试中有@Autowired依赖项,其中包含另一个@Authowired依赖项。我正在使用

@RunWith(SpringJUnit4ClassRunner.class) 

@Rule
public PowerMockRule rule = new PowerMockRule();

为了在我的考试中获得春天语境。

我需要模仿@Autowired成员的内部依赖关系。我可以通过编写以下代码来完成此任务:

@Autowired
private CartService cartService;

private MyValidator validator;

@Test
public void addItemToCartTest() {

 validator =  PowerMock.createMock(MyValidator.class);
 expect(validator.validate(item)).andReturn(true);
 cartService.setValidator(validator);
 PowerMock.replayAll();

 cartService.addItem(item);
     //some code
 verifyAll();
}

一切都是这样的,但我需要显式调用cartService的set方法。我添加了这个方法只是为了测试,现在我想删除它,但如果我没有设置验证器,它就不会被嘲笑。

我怎么能嘲笑它?

1 个答案:

答案 0 :(得分:1)

如果这是单元测试:

将测试范围限制为测试单个具体类。考虑通过构造函数(dependency injection)公开类依赖项,或者使用Whitebox与私有内部状态进行混淆,如果您无法提高字段或setter的可见性以将其打包为private以进行测试。

如果此测试是集成测试:

创建一个自定义spring配置(基于xml或pojo),其中注入的依赖项绑定到模拟。也可以注入模拟,以便执行交互验证。要在junit类中使用自定义配置,请参阅此处:

http://spring.io/blog/2011/06/21/spring-3-1-m2-testing-with-configuration-classes-and-profiles/

您将要在Junit类

上使用@ContextConfiguration
相关问题