Android 单元测试之PowerMock

这篇具有很好参考价值的文章主要介绍了Android 单元测试之PowerMock。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

class PowerMockClassTest {

@Test

fun isFileExists() {

// Mock 一个 File对象

val file = PowerMockito.mock(File::class.java)

// 创建当前类

val powerMockitoClass = PowerMockClass()

// 当Mock对象被调用了 exists() 方法,则返回False

PowerMockito.when(file.exists()).thenReturn(false)

// 进行断言

assertFalse(file.exists())

}

}

对于这种Mock普通对象进行测试来说,不需要使用 @RunWith还有 @PrepareForTest()

2.2 Mock 静态方法


我们创建一个 static的方法:

object PowerMockClass {

@JvmStatic

public fun isFileExists(): Boolean {

return false

}

}

创建测试类,需要使用 mockStatic(),里面装入的是我们要测试静态方法所在的类,测试类如下:

@RunWith(PowerMockRunner::class)

@PrepareForTest(PowerMockClass::class)

class PowerMockClassTest {

@Test

fun isFileExists() {

// mockStatic 来Mock静态方法所在的类

PowerMockito.mockStatic(PowerMockClass::class.java)

// 当Mock对象被调用了 exists() 方法,则返回True

PowerMockito.when(PowerMockClass.isFileExists()).thenReturn(true)

// 进行断言

assertTrue(PowerMockClass.isFileExists())

}

}

注意:

  • 方法需要被 @JvmStaic修饰,这是因为伴生方法虽然看似静态,但其在JVM的运作还是使用普通的对象来的,所以需要通过 JvmStaic声明为真正的静态方法。

  • 所在类需要声明为obejct,因为 mockStatic里的类需要是静态的。

2.3 Mock final方法


final方法还是蛮好操作的,没有什么限制,来看看实现类:

class PowerMockClass {

public final fun isFileExists(): Boolean {

return false

}

}

测试类如下:

@RunWith(PowerMockRunner::class)

@PrepareForTest(PowerMockClass::class)

class PowerMockClassTest {

@Test

fun isFileExists() {

// mock 一个 final方法所在的类的对象

val pmc = PowerMockito.mock(PowerMockClass::class.java)

// 当Mock对象被调用了 exists() 方法,则返回True

PowerMockito.when(pmc.isFileExists()).thenReturn(true)

// 进行断言

assertTrue(pmc.isFileExists())

}

}

2.4 Mock private方法


实现类:

class PowerMockClass {

private fun isFileExists(): Boolean {

return false

}

}

测试类比较简单:

@RunWith(PowerMockRunner::class)

@PrepareForTest(PowerMockClass::class)

class PowerMockClassTest {

@Test

fun isFileExists() {

// mock 一个 private方法所在的类的对象

val pmc = PowerMockito.mock(PowerMockClass::class.java)

// 当Mock对象被调用了 exists() 方法,则返回True

PowerMockito.doReturn(true).when(pmc, “isFileExists”)

}

}

可以看到基本和上面基本没差别,但是由于我们不能直接调用 private方法,所以不好做断言,这个时候我们可以加一个包装方法:

class PowerMockClass {

public fun isPubFileExists(): Boolean {

return isFileExists()

}

}

在测试类中调用:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

Android 单元测试之PowerMock,程序员,android,单元测试

Android 单元测试之PowerMock,程序员,android,单元测试

Android 单元测试之PowerMock,程序员,android,单元测试

Android 单元测试之PowerMock,程序员,android,单元测试

Android 单元测试之PowerMock,程序员,android,单元测试

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

Android 单元测试之PowerMock,程序员,android,单元测试

结尾

我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

Android 单元测试之PowerMock,程序员,android,单元测试

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-856661.html

及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。**

[外链图片转存中…(img-jqIERjO8-1713017233882)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

到了这里,关于Android 单元测试之PowerMock的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java & jacoco & powerMock 单元测试覆盖率为0怎么解决

    我们项目中使用powerMock作为单元测试的mock工具,统计项目测试覆盖率使用jacoco编译的结果上传到sonar,但是jacoco 和 powerMock在运行时runtime加载代码的时候自定义了类加载器,所以就会有冲突,导致测试覆盖率为0。 使用命令 mvn clean verify sonar:sonar上传jacoco编译结果(这里sonar命令

    2023年04月08日
    浏览(45)
  • 职场经验、为什么程序员一定要写单元测试?

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客 文章浏览阅读2.5k次,点赞85次,收藏11次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、

    2024年02月21日
    浏览(60)
  • 基于Junit4+Mockito+PowerMock实现Controller+Service的单元测试

    一 导入的依赖 二 依赖版本 三 controller测试示例代码       controller         controllerTest         测试结果:覆盖率100%         带异常的Controller         带异常提示的ControllerTest         测试结果,覆盖率100%   三 service测试示例代码         service         serviceTest    

    2024年02月14日
    浏览(43)
  • 程序员技能与成长:如何学习新的编程语言和代码规范与单元测试

    一名软件工程师的最大挑战就是使自己的技术栈跟得上技术的发展,而在这个技术飞速发展的时代,保证自己不被淘汰的唯一方法就是不断学习。 那么,程序员需要掌握多门编程语言吗?很多初学者都被这个问题所困扰。Google研究总监 Peter Norvig曾就这个问题给出自己的观点

    2024年04月10日
    浏览(47)
  • Android单元测试(五):网络接口测试

    温馨提示:如果你不太熟悉单元测试,可以先看下之前四篇基础框架使用。便于你更好的理解下面的内容。 在平日的开发中,我们用后台写好给我们接口去获取数据。虽然我们有一些请求接口的工具,可以快速的拿到返回数据。但是在一些异常情况的处理上就不太方便了。我

    2024年02月08日
    浏览(41)
  • Android相机开发实战,Android程序员必看

    由于需求不同,所以选择的方案固然也不同,至于第二种调用系统相机,这里就不过多讲解了,使用Intent对象设置一个Action动作即可,跳转时使用startActivityForResult,然后在onActivityResult处理相关数据便可,关键代码: intent.setAction(“android.media.action.STILL_IMAGE_CAMERA”); 至于使用

    2024年04月15日
    浏览(48)
  • Android程序员成长之路

    应该热爱学习Android知识 具备基本的自学能力和解决问题的能力 具备实践能力 Java(基本) C/C++(进阶) Kotlin(基本) Python(可选) 飞书学习路线图 学习路线图正在完善中... 当然读者也可以提出宝贵建议。 我将会按照 Android学习路线图 发布博客文章。 因本人才疏学浅,博客文章中难

    2024年02月09日
    浏览(45)
  • Android下单元测试实践——测试框架简介

    测试代码的写法可以归纳为三部分 第一部分: 准备测试数据和定义mock行为 第二部分: 调用真实的函数 第三部分: 调用验证函数进行结果的验证 在模块的test路径下编写测试案例。在类中使用@Test注解,就可以告诉Junit这个方法是测试方式。同时使用assert*方法,可以调用J

    2024年02月04日
    浏览(38)
  • 区块链钱包开发(Android篇),Android程序员必会

    布隆过滤器(Bloom Filter):过滤掉那些不包含有目标地址的交易信息,这一步能避免掉大量不相关的数据下载。 创建区块链 //创建区块链文件 File blockChainFile = new File(getDir(“blockstore”, Context.MODE_PRIVATE), “blockchain”); //创建SPVBlockStore,管理区块数据 blockStore = new SPVBlockStore(Co

    2024年04月09日
    浏览(85)
  • Android 单元测试初体验

    当初在学校学安卓的时候,老师敢教学进度,翻到单元测试这一章节的时候提了两句,没有把单元测试当重点讲,只是说我们工作中几乎不会用到,果真在之前的几年工作当中我真的没有用到,工作中都没有写过单元测试,后来我自己也下意识的忽略了这一块,直到听说现在

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包