文档详情

Junitmockito解耦合测试讲义.doc

发布:2017-02-13约1.12万字共12页下载文档
文本预览下载声明
Junit mockito解耦合测试   Mock测试是单元测试的重要方法之一。 1、相关网址   官网:/ 2、什么是Mock测试   Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。   Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。   当我们需要测试A类的时候,如果没有 Mock,则我们需要把整个依赖树都构建出来,而使用 Mock 的话就可以将结构分解开,像下面这样:   只需提供mock B 和mock C 的返回即可的,不需要知道其底层具体是怎么实现的。 3、mock使用的场景和好处 真实的对象具有不确定的行为,产生不可预测效果。(如:股票行情,天气预报),我们经常会遇到测试的时候需要去数据库中查询某些数据,但是未知的,就算是知道的,假如有一天数据被删除了或者被修改了,很难进行回归测试。 真实对象很难被创建的,真实对象的某些行为很难被触发。 真实对象实际上还不存在的。如:某个接口依赖其他系统的服务或者该接口还没开发出来。我们就可以使用mock假设其返回的数据进行测试。而不用等待其开发完接口,我们再进行测试。提高开发的效率 4、一些特点 可以 mock 具体类而不单止是接口 一点注解语法糖 - @Mock 干净的验证错误是 - 点击堆栈跟踪,看看在测试中的失败验证;点击异常的原因来导航到代码中的实际互动。堆栈跟踪总是干干净净。 允许灵活有序的验证(例如:你任意有序 verify ,而不是每一个单独的交互) 支持“详细的用户号码的时间”以及“至少一 次”验证 灵活的验证或使用参数匹配器的 stub ( anyObject() , anyString() 或 refEq() 用于基于反射的相等匹配) 允许创建 自定义的参数匹配器 或者使用现有的 hamcrest 匹配器 5、maven配置 1)Junit的maven 复制代码 dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.11/version scopetest/scope /dependency 复制代码 2)mockito的maven 复制代码 dependency groupIdorg.mockito/groupId artifactIdmockito-all/artifactId version1.9.5/version scopetest/scope /dependency 复制代码 6、使用   首先我们需要引入静态资源 import static org.mockito.Mockito.*; import static org.junit.Assert.*; 1)验证行为 复制代码 @Test public void verify_behaviour(){ //模拟创建一个List对象 List mock = mock(List.class); //使用mock的对象 mock.add(1); mock.clear(); //清空mock对象 //验证add(1)和clear()行为是否发生 verify(mock).add(1); verify(mock).clear(); } 复制代码 2)模拟我们所期望的结果 复制代码 public void when_thenReturn(){ //mock一个Iterator类 Iterator iterator = mock(Iterator.class); //预设当iterator调用next()时第一次返回hello,第n次都返回world when(iterator.next()).thenReturn(hello).thenReturn(world); //使用mock的对象 String result = iterator.next() + +
显示全部
相似文档