BeanMock的使用介绍与说明

本文介绍了一种改进的单元测试方法,通过扩展Mockito和Spring Test,支持注解式的嵌套对象mock,解决了classA->classB->classC场景下的测试难题。此方法避免了使用反射或PowerMock的复杂性。

使用场景

Mockito是java单元测试很常用的一个工具。但是在classA -> classB -> classC 的场景中,假如需要对classA进行单元测试,需要针对ClassC的方法返回不同结果进行验证,而又不希望对classB进行mock。 这个时候一般的解决方案有两种:

1、使用反射的层层调用(但是对于更深层的调用会显得很繁琐,并且需要手工恢复场景,否则会污染其他测试场景,因为spring上下文是全局的,除非使用DirtesContext)

2、改用powerMock

为了更好的接口上述的高频场景,对mockito和spring test进行了扩展,支持注解式的嵌套对象mock 代码中有完整的例子提供运行。

@RunWith(SpringBeanMockTestClassRunner.class) // 使用SpringJUnit4ClassRunner的扩展Runner @ContextConfiguration(locations = "classpath:applicationContext.xml") public class LoginServiceTest {

@MockBean("userService") //标注当前属性需要输入的目标bean(也就是说userService中有configurationService这个属性,并且是通过spring注入的) private ConfigurationService configurationService;

@Resource private LoginService loginService;

@Test public void test(){ Mockito.when(configurationService.userCache()).thenReturn(true);
User user = loginService.login(); assertEquals("cache",user.getSource()); }

@Test public void testFromDb(){ User user = loginService.login(); assertEquals("db",user.getSource()); } 由于相关代码比较少,所以并没有打包成jar包,而是直接提供源码,使用时直接引用源码

转载于:https://my.oschina.net/everxu/blog/1650312

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值