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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
结尾
我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-856661.html
及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。**
[外链图片转存中…(img-jqIERjO8-1713017233882)]文章来源:https://www.toymoban.com/news/detail-856661.html
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
到了这里,关于Android 单元测试之PowerMock的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!