一、就是上面的方案,用mockSerivce去替换demoSerivce里的remoteService 。
demoService.setRemoteService(remoteService);
二、替换springContext里面的remoteSerice,这就需要使用@MockBean 这个注解 。然后,所有注入的remoteService,都是Mock生成的service
@MockBeanRemoteService remoteService;
但是据说MockBean有副作用,会多次重启Spring context 。可能也会污染上下文 。暂时没有去尝试研究 。场景二:修改静态类方法,比如一些单例的方法 。在我的场景里,是自定义了一个单例JdbcClient,client保存连接池,然后发起请求 。
这个是使用PowerMockito,因为只有他能mock static方法先来代码
public class MockitoTest extends BaseTest {@AutowiredDemoService demoService;@Testpublic void testHack() throws Exception {String result = "fail";PowerMockito.mockStatic(JdbcClient.class);Mockito.when(JdbcClient.sendRequest(any())).thenReturn(result);String callResult = demoService.callRemote("something");assertEquals("fail", callResult);}}
这里的主要用法就是 PowerMockito.mockStatic 这个 。但是要结合之前的两个注解,@RunWith(PowerMockRunner.class) @PrepareForTest({JdbcClient.class}) 这个使用才有效 。就写这两个场景吧 。后续用到比较好的场景再补充,也欢迎大家提供更多使用场景一起学习学习 。
推荐阅读
- 2017年诺贝尔物理学奖的获得者 20年诺贝尔物理学奖揭晓
- 为什么要在月球上建造基地 月球建设基地的可能性
- 冥王星到底有多可怕?它被踢出行星行列,是有原因的 冥王星为什么被踢出行星
- 断尾重生的动物有哪些 什么动物断尾求生
- 被我用烂的DEBUG调试技巧,专治各种搜索不到的问题
- Linux分段系统中的地址映射和基本机制
- 编辑器的自制
- 设计一个高效的定时任务系统
- Pony - 最智能的 Python ORM 框架
- Java开源框架之SpringMVC原理及源码解析