用PowerMock spy mock private方法】的更多相关文章

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…
在实际的工作中,经常碰到只需要mock一个类的一部分方法,这时候可以用spy来实现. 被测类: public class EmployeeService { public boolean exist(String userName) { checkPrivateExist(userName); checkPublicExist(userName); return true; } private void checkPrivateExist(String userName) { throw new…
Mock  private methods 就是mock私有方法啦,学到这不难发现,我们其实大部分都是通过反射去完成单元测试的,但是在实际中,某个类中的私有方法,个人不建议使用反射来测试,因为有时候会覆盖单元测试中的方法,那么下面我们就来举个例子,来使用mock来模拟私有方法的测试. 模拟场景 假设我们按照人名去查找一个学生是否存在isExist(),如果存在就返回true,否则false,同时调用这个类中的私有的查找方法返回学生个数,如果存在返回1,不存在返回0 业务逻辑部分代码比较简单,具体…
Method method = PowerMockito.method(CategoryController.class, "getCategory",List.class);//创建调用CategoryController类中的getCategory私有方法的method对象,参数是list对象 List<Category> category_all_actual = (List<Category>)method.invoke(categoryControll…
上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口.这个时候就需要利用Mockito来协助我们完成测试. 当然,你可以选择easyMock ,jmock等mock工具 在这里直接引用<PowerMock实战手册>中的例子 待测类: public class EmployeeService { private EmployeeDao employeeDao; public EmployeeService(Employee…
这里首先有一个问题要考虑的是,这类方法是否要被测试? 理论上,这类方法都会被其它public类型的方法调用,只要对那些public的方法做充分的测试,就可以保证这些方法的可靠性,就没有必要再测了.好像是有道理的. 我们先看看好的单元测试的原则:(ATRIP) 自动化(Automatic) 彻底(Thorough ) 可重复(Repeatable) 独立(Independent ) 专业(Professional) 对于测试private/protected方法来说,有另外三个附加原则: 透明(T…
<dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>1.6.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.power…
最近重温了<Thinking in Java>,发现了一个让我为之兴奋的知识漏洞,必须得分享一下. 上一篇的<Java类初始化的过程>的随笔中,那个初始化顺序并不完整.初始化的实际过程是: 在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的0: 如上一篇的<Java类初始化的过程>那样:父类的static成员变量和方法-->该类的static变量和方法-->开始实例化-->父类的普通成员变量和方法-->父类的构造方法-->该类的…
话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧! 自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我说,写这个很麻烦啊,代码很乱,你得mock一堆. 既然已经跳进去了,那就游一会儿吧.为了mock,可谓想尽了办法啊,从一般的mock工具mockito,到java的反射,最后发现一个强大的工具——PowerMockito   他居然能够mock私有方法.虽然,最后被老大们说私有方法是不应该mock的…