Spring的Mock测试你用上了吗?( 二 )


一、就是上面的方案,用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}) 这个使用才有效 。
就写这两个场景吧 。后续用到比较好的场景再补充,也欢迎大家提供更多使用场景一起学习学习 。




推荐阅读