用Mockito mock普通的方法】的更多相关文章

上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口.这个时候就需要利用Mockito来协助我们完成测试. 当然,你可以选择easyMock ,jmock等mock工具 在这里直接引用<PowerMock实战手册>中的例子 待测类: public class EmployeeService { private EmployeeDao employeeDao; public EmployeeService(Employee…
话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧! 自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我说,写这个很麻烦啊,代码很乱,你得mock一堆. 既然已经跳进去了,那就游一会儿吧.为了mock,可谓想尽了办法啊,从一般的mock工具mockito,到java的反射,最后发现一个强大的工具——PowerMockito   他居然能够mock私有方法.虽然,最后被老大们说私有方法是不应该mock的…
<dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>1.6.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.power…
1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂,复杂到不值得编写,Mock模拟内部或外部依赖可以帮助我们解决这些问题 另一本TDD书的解释: (1)对象的结果不确定,如每获取当前时间,得到的结果都不一样,无法符合我们的预期: (2)实现这个接口的对象不存在: (3)对象速度缓慢 对于TDD还有一个更重要原因:通过模拟可以隔离当前方法使用的的所有…
我需要测试的方法是 public 方法: public ResponseResult subscribe(SysSubscription sysSubscription) throws JsonGenerationException, JsonMappingException, IOException { LOGGER.debug("=====================subscribe Subscription======================="); Respons…
In this post, we are going to see more functionalities in Mockito. Mock a List interface: @Test public void testZie_returnOnce() { List listMock = mock(List.class); when(listMock.size()).thenReturn(10); assertEquals(10, listMock.size()); } Call multi…
在编写代码时,经常需要调用别人已经写好的工具类,而这些工具提供的方法经常是static方法,在这里,直接贴出<PowerMock实战手册>中的例子 待测试方法: public class EmployeeService { public int getEmployeeCountWithStatic() { return EmployeeUtils.getEmployeeCount(); } } 引用的工具类 public class EmployeeUtils { public static…
测试某个异常抛出情况,单元测试输出为验证Logger的一条记录,该异常情况日志记录LogInfo,但是LogInfo中平时都用一个参数,在catch这个异常时调用了两个参数的重载方法,导致一直Mock失败. 更改Mock参数后成功.…
import java.util.Random; public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if (doTheGamble("Whatever", 1 << 3)) { throw new RuntimeException("boom"); } } private boolean doTheGamble(String whatever, int bin…
转载:https://unmi.cc/mockito-how-to-mock-void-method/#more-7748 最初接触 Mockito 还思考并尝试过如何用它来 mock 返回值为 void 的方法,然而 Google 查找到的一般都会说用 doThrow() 的办法 doThrow(new RuntimeException()).when(mockObject).methodWithVoidReturn(); 因为无法使用常规的 when(mockObject.foo()).th…
有些对象需要mock的对象是由工厂方法产生出来的,而工厂方法一般是静态方法,这时候就需要同时mock工厂方法及对象 被测方法: public class EmployeeServiceFactory { public void saveEmployee(Employee employee){ EmployeeDaoFactory dao = EmployeeDaoFactory.newInstance(); method("powermock"); dao.addEmployee(em…
无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访问实际的文件系统或数据库),而TDD经常会碰到协同模块尚未开发的情况,而mock技术正是解决这些问题的灵丹妙药. mock技术的目的和作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开. 我们可以自己编写自定义的Mock对象实现mock技术,但是编写自定义的Mo…
什么是类的部分mock(partial mock)?A:部分mock是说一个类的方法有些是实际调用,有些是使用mockito的stubbing(桩实现). 为什么需要部分mock? A:当需要测试一个组合方法(一个方法需要其它多个方法协作)的时候,某个叶子方法(只供别人调用,自己不依赖其它反复)已经被测试过,我们其实不需要再次测试这个叶子方法,so,让叶子打桩实现返回结果,上层方法实际调用并测试. mockito实现部分mock的两种方式:spy和callRealMethod() spy实现:…
本文转自:http://qiuguo0205.iteye.com/blog/1443344 1. 为什么使用Mockito来进行单元测试? 回答这个问题需要回答两个方面,第一个是为什么使用mock?mock其实是一种工具的简称,他最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为. 比如一段代码有这样的依赖: 当我们需要测试A类的时候,如果没有mock,则我们需要把整个依赖树都构建出来,而使用mock的话就可以将结构…
mockito http://www.vogella.com/tutorials/Mockito/article.html 原文地址: http://www.open-open.com/lib/view/open1462177583813.html 在第一篇文章里面 我们提到,返回类型为void方法的单元测试方式,往往是验证里面的某个对象的某个方法是否得到了调用.在那篇文章里面,我举的例子是activity里面的一个login方法: public void login() { String us…
最近试用了一下Mockito,感觉真的挺方便的.举几个应用实例: 1,需要测试的service中注入的有一个dao,而我并不需要去测试这个dao的逻辑,只需要对service进行测试.这个时候怎么办呢,mockito就可以做到把这个dao给mock了,调用这个dao的方法会直接返回预设的值,不会去真正的执行dao里的逻辑,省时省力,专注于眼前. 2,不想在单测时启动容器,加载一堆没有用的东西.这个时候你就可以把你的单元测试写成一个纯junit的test类,可以飞快的跑完测试逻辑,不用等待serv…
mockito http://www.vogella.com/tutorials/Mockito/article.html 原文地址: http://www.open-open.com/lib/view/open1462177583813.html 在第一篇文章里面 我们提到,返回类型为void方法的单元测试方式,往往是验证里面的某个对象的某个方法是否得到了调用.在那篇文章里面,我举的例子是activity里面的一个login方法: 1 public void login() { 2 Strin…
Mock 是什么mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的代替品. 简单的看一张图 我们在测试类 A 时,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D.E.F 等,假如类 D.E.F 构造很耗时又或者调用很耗时的话是非常不便于测试的(比如是 DAO 类,每次访问数据库都很耗时).所以我们引入 Mock 对象. 如上图,我们将类…
在 Java 测试中使用 Mockito 有段时日了,以前只是想当然的认为 Mock 的对象属性值和方法返回值都是依据同样的规则.基本类型是 0, 0.0, 或 false, 对象类型都是 null, Mock 对象的默认返回值也应该是一样的.直到最近有一天,有一个返回 Optional<String> 类型的方法,由于忘记对该方法打桩,意外的发现它返回的不是 null, 而 Optional.empty(), 因此才意识到此处定有蹊跷.着实有必要用代码验证一下 Mockito 是怎么决定属性…
转载:https://blog.csdn.net/m0_38043362/article/details/80111957 1. 原理介绍 通过BeanFactoryPostProcessor向BeanFactory中注册需要进行Mock的对象,使当前Bean容器在依赖注入时使用 我们提供的Mock对象注入到实例中使用. 具体需要交给容器管理的mock实例,是通过TestExecutionListener在容器开始启动前去解析当前测试类中的使用@Mock 注解的字段,然后根据类型创建对应的Moc…
转载:http://www.blogjava.net/qileilove/archive/2014/03/07/410713.html 1.关键词 单元测试.spring.mockito 2.概述 单元测试目前已经成为项目中保证代码质量的一种必要方法,对于一些不易构造或者不易获取的对象通过mock的方式进行测试是一种很有效的处理办法.在基于spring的mock测试中,mock对象获取和使用的便利性可以提升单元测试代码的质量. 3.实现原理 Mock对象的注入使用注解和反射,对象注入依赖spri…
转载:https://blog.csdn.net/qq_30141957/article/details/81273829 项目中,有些函数需要处理某个服务的返回结果,而在对函数单元测试的时候,又不能启动那些服务,这里就可以利用Mockito工具.Mockito中的Mock和Spy都可用于拦截那些尚未实现或不期望被真实调用的对象和方法,并为其设置自定义行为.二者的区别在于: 1.Mock声明的对象,对函数的调用均执行mock(即虚假函数),不执行真正部分. 2.Spy声明的对象,对函数的调用均执…
转载:https://blog.csdn.net/paincupid/article/details/53561435 1.引入mockito jar包 <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>2.0.2-beta</version> </dependency> 2.对于M…
由于注册时,需要对输入的密码进行加密,使用到了 UUID.sha1.md 等算法.在单元测试时,使用到了 Powermock,记录如下. 先看下加密算法: import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.digest.DigestUtils; import java.util.UUID; public class Encrypt { /** * 密码加密 * @param passwor…
http://www.open-open.com/lib/view/open1462177583813.html [From] http://www.open-open.com/lib/view/open1462177583813.html 几点说明: 代码中的 //<== 表示跟上面的相比,这是新增的,或者是修改的代码,不知道怎么样在代码块里面再强调几行代码T_T... 很多时候,为了避免中文歧义,我会用英文表述 在第一篇文章里面 我们提到,返回类型为void方法的单元测试方式,往往是验证里面…
因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法. 但PowerMock可以mock静态方法,因为它直接在bytecode上工作. PowerMock是一个JUnit扩展,它利用了EasyMock和Mockito模拟静态method的方法对Java中的静态method进行Mock,而且它还有更多的功能(详见git…
Mockito是一个流行的Mocking框架.它使用起来简单,学习成本非常低.并且具有非常简洁的API,測试代码的可读性非常高.因此它十分受欢迎,用 户群越来越多.非常多的开源的软件也选择了Mockito. 要想了解很多其它有关Mockito的信息.请訪问它的官方网 站:http://mockito.org/ 一.简单演示样例 /* * Creation : 2015年8月14日 */ package com.tan.test; import static org.junit.Assert.as…
在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比较麻烦. 所以出现了Mock! 我们可以用 Mock 工具来模拟这些外部对象,来完成我们的单元测试. 实现Mock技术的优秀开源框架有很多,下面以Mockito为例,用几个简单例子来介绍Mock工具的基本使用: 1.Mockito的第一个示例 @Test public void simpleTest…
相同点 spy和mock生成的对象不受spring管理 不同点 1.默认行为不同 对于未指定mock的方法,spy默认会调用真实的方法,有返回值的返回真实的返回值,而mock默认不执行,有返回值的,默认返回null 2.使用方式不同 Spy中用when...thenReturn私有方法总是被执行,预期是私有方法不应该执行,因为很有可能私有方法就会依赖真实的环境.Spy中用doReturn..when才会不执行真实的方法. mock中用 when...thenReturn 私有方法不会执行. 3.…
在写单元测试的时候,不免可能需要mock一些对象出来,并且mock一些方法调用去返回一个自己想要的对象.一般的使用是这样的: FinalPumpkin pumpkin = mock(FinalPumpkin.class); when(pumpkin.getName()).thenReturn("www.pkslow.com"); 这样我们便可以自定义这个类getName()方法的返回,以达到我们测试特定情况的需要. 但假设可能我们要影响的是下面这样的返回结果呢? pumpkin.get…