用PowerMockito来mock私有方法(转)

简介:  话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧!     自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我说,写这个很麻烦啊,代码很乱,你得mock一堆。

 

话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧!

   自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我说,写这个很麻烦啊,代码很乱,你得mock一堆。

   既然已经跳进去了,那就游一会儿吧。为了mock,可谓想尽了办法啊,从一般的mock工具mockito,到java的反射,最后发现一个强大的工具——PowerMockito   他居然能够mock私有方法。虽然,最后被老大们说私有方法是不应该mock的用PowerMockito来mock私有方法(慎重!),好吧,那我记录下总可以把,或许以后还是会用到呢。以下是一个例子:


   //模拟 threadController的 doShowChildrens私有方法
   val postCountOf24HourMap= new HashMap[String, Int]()
   postCountOf24HourMap.put("1009",26)
   postCountOf24HourMap.put("1010",90)
   mav.addObject("postCountOf24HourMap", postCountOf24HourMap)


   var childrensMap =new HashMap[String,ForumDynamicInfo]()
   val forumDynamicInfo:ForumDynamicInfo  = new ForumDynamicInfo
   forumDynamicInfo.setRssCount(50) //设置关注数
   childrensMap.put("1010",null)
   childrensMap.put("1009",forumDynamicInfo)
   mav.addObject("childrensMap",childrensMap)

   var childrens = new LinkedList[Forum]()
   val childForum = new Forum
   childForum.setFid(1009)
   childForum.setName("测试版块")
   childForum.setDescription("记录下你的心情吧")
   childForum.setIcon("http://www.icon.com/icon.jpg")
   childForum.setIconUrl("http://www.19lou.com")
   val   moderator = new Moderator
   moderator.setUserName("版主")
   childForum.setModeratorList(List(moderator))
   childrens.add(childForum)
   mav.addObject("childrens",childrens)


   PowerMockito.doReturn(mav).when(threadControllerSpy, "doShowChildrens",mav,forum);

 

http://blog.sina.com.cn/s/blog_6176c38201014dg1.html

 

目录
打赏
0
0
0
0
95
分享
相关文章
私有属性和私有方法的最佳实践是什么?
【10月更文挑战第30天】选择合适的方式来实现私有属性和私有方法,并遵循相关的设计原则和代码规范,能够提高JavaScript代码的质量、可维护性和安全性,更好地满足面向对象编程中的封装和信息隐藏要求。在实际开发中,可以根据项目的具体需求、团队的技术栈和代码风格等因素综合考虑,选择最适合的实现方式。
webFilter实现mock接口
这段代码实现了一个名为 `MockFilter` 的类,继承自 `WebFilter` 接口,用于处理 HTTP 请求和响应。它通过从 Redis 缓存中获取配置信息来决定是否使用模拟数据或缓存数据来响应请求。如果开启了生产模式或关闭了模拟和缓存功能,则直接放行请求。否则,它会检查请求体并根据配置返回相应的模拟或缓存数据。同时,该过滤器支持对响应结果进行处理,并将结果存储回 Redis 中。
重写、抽象类、接口
Java编程涉及重载、重写、final、super、抽象类、static和接口。方法重载允许同名方法,但参数列表需不同;方法重写在子类中重新定义父类方法,保持相同签名。final修饰的类不可继承,final方法不可重写。抽象类包含抽象方法,不能实例化,子类必须重写抽象方法。static修饰静态属性和方法,与对象无关。接口是抽象类的极致形式,包含常量和抽象方法,实现接口需重写方法。Java中,接口可多继承,而类单继承。
57 0
单元测试问题之Mockito 3.4mock静态方法如何解决
单元测试问题之Mockito 3.4mock静态方法如何解决
401 1
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
75 1
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
525 1
PowerMock:静态方法与私有方法测试
PowerMock是Java单元测试中扩展Mockito的框架,允许模拟静态方法、构造函数、私有方法和final类,以增强测试隔离和覆盖率。主要应用场景包括静态方法模拟、私有方法测试和构造函数/Final类模拟。然而,使用时需注意配置复杂性、避免过度使用、精确控制模拟行为和遵循最佳实践。示例展示了如何模拟静态方法,通过添加PowerMock依赖和使用PowerMockito.mockStatic进行静态方法的模拟和验证。正确使用PowerMock能提升测试质量,但应谨慎以保持代码可读性和测试有效性。
501 5
PowerMock:静态方法与私有方法测试
单元测试问题之在Mockito中静态方法的调用,如何模拟
单元测试问题之在Mockito中静态方法的调用,如何模拟
PowerMock的静态方法与私有方法怎么测试?
**PowerMock**是Java单元测试中的增强工具,扩展了Mockito,支持模拟静态方法、构造函数、私有方法和final类,促进更高测试覆盖率。它用于隔离依赖,测试静态方法和私有方法。常见问题包括配置复杂性、过度使用、忽略真实行为模拟和最佳实践。解决方案包括遵循官方文档、谨慎使用、精确模拟和测试后清理。示例展示了如何模拟静态方法,通过添加PowerMock依赖和使用`@RunWith(PowerMockRunner.class)`、`@PrepareForTest`注解,以及`PowerMockito.mockStatic()`进行静态方法模拟。
255 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等