Android 单元测试之PowerMock,2024Android大厂面试题来袭

avatar
作者
猴君
阅读量:0

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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

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

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

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

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。

下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。

不论遇到什么困难,都不应该成为我们放弃的理由!

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

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

学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。

下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。

[外链图片转存中…(img-lBFjJxII-1712348732480)]

不论遇到什么困难,都不应该成为我们放弃的理由!

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!