spring中使用mockito
来源:互联网 发布:mac双系统快速切换 编辑:程序博客网 时间:2024/06/05 16:25
1 mockito介绍和入门
官方:https://github.com/mockito/mockito
入门:
5分钟了解Mockito http://liuzhijun.iteye.com/blog/1512780
Mockito:一个强大的用于 Java 开发的模拟测试框架 http://www.oschina.net/translate/mockito-a-great-mock-framework-for-java-development
2 spring中正常使用mockito
上demo代码:
1 @RunWith(SpringJUnit4ClassRunner.class) 2 @ContextConfiguration(locations = { "classpath:testApplicationContext.xml" }) 3 public class SpringMockitoTest { 4 5 @Mock 6 private ApiService mockApiService; 7 8 @Before 9 public void initMocks() {10 MockitoAnnotations.initMocks(this);11 when(mockApiService.test()).thenReturn("ok");12 }13 14 @Test15 public void should_success_when_testApiService() {16 String result = mockApiService.test();17 Assert.assertEquals("ok", result);18 }19 }20 21 @Component22 public class ApiService {23 24 @Autowired25 private TestApiService testApiService;26 27 public String test() {28 String connect = testApiService.connect();29 connect += "test";//test自己的业务30 return connect;31 }32 }33 34 @Component35 public class TestApiService {36 public String connect() {37 return "error";38 }39 40 public String findFromDb() {41 return "db_data";42 }43 }
正常使用spring和mockito中,我们把需要的mock的ApiService给mock掉,但是我们更想的是把TestApiService中的connect方法mock掉,这样就可以测试我们自己的代码,也就是ApiService中test方法自己的业务。
3 spring中mock任何容器内对象
上面的demo中,我们如何mock掉TestApiService中的test方法?
因为TestApiService是spring容器管理的bean,并且ApiService中使用到TestApiService,所以我们把ApiService中引用的TestApiService替换成我们的mock对象即可。
Spring框架有个反射工具ReflectionTestUtils,可以把一个对象中属性设置为新值,我们可以使用:
ReflectionTestUtils.setField(apiService, "testApiService", spyTestApiService);
把我们mock的testApiService放到apiService中,这样apiService调用就是我们mock的对象了;但是默认spring中apiService对象是代理对象,不能直接把值设置到属性上,所以我们自己写个小的工具类,在最后如下:
ReflectionTestUtils.setField(AopTargetUtils.getTarget(apiService), "testApiService", spyTestApiService);
完整demo:
最后就是注意测试之后要还原现场,把spring对象还原,尤其在跑maven test的时候,否则可能会影响其他人的测试。
作者:syxChina
出处:http://syxchina.cnblogs.com、www.jingruigroup.com
本文版权归作者、博客园和百度空间共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则作者会诅咒你的。
如果您阅读了我的文章并觉得有价值请点击此处,谢谢您的肯定1。
- spring中使用mockito
- spring中使用mockito入门
- Spring中如何使用Mockito做单元测试
- hadoop中使用Mockito进行单元测试
- Android中Mock以及Mockito的使用
- Mockito使用
- Mockito使用
- Mockito使用
- Mockito使用
- Mockito 使用
- 在spring框架中,结合mockito打桩做单元测试
- Mockito与Spring中@Autowired与@InjectMocks组合
- spring and Mockito
- spring结合mockito
- spring autowired mockito单元测试
- spring and Mockito
- 使用Mockito中@Mock快速创建mock对象
- 开始使用 Mockito
- [SqlServer] 性能优化实战-join与where条件执行顺序
- MAXScript 例子 查找纹理坐标
- 移动端页面宽度自适应
- 《iOS Programming》 读书笔记 Day1
- 天声人语
- spring中使用mockito
- Mongodb启动命令mongod参数说明
- 关于EditText的一点深入的了解
- paint和paintComponent方法的关系
- 天声人语
- 迭代器模式
- 控件EditText的setOnEditorActionListener方法的理解
- WMS简介 (and5.1)
- 天声人语