class PowerMockClassTest {
@Test
fun isFileExists() {
// Mock 一個 File對象
val file = PowerMockito.mock(File::class.java)
// 創(chuàng)建當(dāng)前類
val powerMockitoClass = PowerMockClass()
// 當(dāng)Mock對象被調(diào)用了 exists() 方法,則返回False
PowerMockito.when
(file.exists()).thenReturn(false)
// 進(jìn)行斷言
assertFalse(file.exists())
}
}
對于這種Mock普通對象進(jìn)行測試來說,不需要使用 @RunWith
還有 @PrepareForTest()
2.2 Mock 靜態(tài)方法
我們創(chuàng)建一個 static的方法:
object PowerMockClass {
@JvmStatic
public fun isFileExists(): Boolean {
return false
}
}
創(chuàng)建測試類,需要使用 mockStatic()
,里面裝入的是我們要測試靜態(tài)方法所在的類,測試類如下:
@RunWith(PowerMockRunner::class)
@PrepareForTest(PowerMockClass::class)
class PowerMockClassTest {
@Test
fun isFileExists() {
// mockStatic 來Mock靜態(tài)方法所在的類
PowerMockito.mockStatic(PowerMockClass::class.java)
// 當(dāng)Mock對象被調(diào)用了 exists() 方法,則返回True
PowerMockito.when
(PowerMockClass.isFileExists()).thenReturn(true)
// 進(jìn)行斷言
assertTrue(PowerMockClass.isFileExists())
}
}
注意:
-
方法需要被
@JvmStaic
修飾,這是因為伴生方法雖然看似靜態(tài),但其在JVM的運作還是使用普通的對象來的,所以需要通過 JvmStaic聲明為真正的靜態(tài)方法。 -
所在類需要聲明為
obejct
,因為mockStatic
里的類需要是靜態(tài)的。
2.3 Mock final方法
final方法還是蠻好操作的,沒有什么限制,來看看實現(xiàn)類:
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)
// 當(dāng)Mock對象被調(diào)用了 exists() 方法,則返回True
PowerMockito.when
(pmc.isFileExists()).thenReturn(true)
// 進(jìn)行斷言
assertTrue(pmc.isFileExists())
}
}
2.4 Mock private方法
實現(xiàn)類:
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)
// 當(dāng)Mock對象被調(diào)用了 exists() 方法,則返回True
PowerMockito.doReturn(true).when
(pmc, “isFileExists”)
}
}
可以看到基本和上面基本沒差別,但是由于我們不能直接調(diào)用 private方法,所以不好做斷言,這個時候我們可以加一個包裝方法:
class PowerMockClass {
public fun isPubFileExists(): Boolean {
return isFileExists()
}
…
}
在測試類中調(diào)用:
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)初中級Android工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則近萬的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Android移動開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ⅲ篈ndroid)

結(jié)尾
我還總結(jié)出了互聯(lián)網(wǎng)公司Android程序員面試涉及到的絕大部分面試題及答案,并整理做成了文檔,以及系統(tǒng)的進(jìn)階學(xué)習(xí)視頻資料分享給大家。
(包括Java在Android開發(fā)中應(yīng)用、APP框架知識體系、高級UI、全方位性能調(diào)優(yōu),NDK開發(fā),音視頻技術(shù),人工智能技術(shù),跨平臺技術(shù)等技術(shù)資料),希望能幫助到你面試前的復(fù)習(xí),且找到一個好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時間來學(xué)習(xí)。
《互聯(lián)網(wǎng)大廠面試真題解析、進(jìn)階開發(fā)核心學(xué)習(xí)筆記、全套講解視頻、實戰(zhàn)項目源碼講義》點擊傳送門即可獲?。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-856661.html
及到的絕大部分面試題及答案,并整理做成了文檔,以及系統(tǒng)的進(jìn)階學(xué)習(xí)視頻資料分享給大家。
(包括Java在Android開發(fā)中應(yīng)用、APP框架知識體系、高級UI、全方位性能調(diào)優(yōu),NDK開發(fā),音視頻技術(shù),人工智能技術(shù),跨平臺技術(shù)等技術(shù)資料),希望能幫助到你面試前的復(fù)習(xí),且找到一個好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時間來學(xué)習(xí)。**
[外鏈圖片轉(zhuǎn)存中…(img-jqIERjO8-1713017233882)]文章來源:http://www.zghlxwxcb.cn/news/detail-856661.html
《互聯(lián)網(wǎng)大廠面試真題解析、進(jìn)階開發(fā)核心學(xué)習(xí)筆記、全套講解視頻、實戰(zhàn)項目源碼講義》點擊傳送門即可獲??!
到了這里,關(guān)于Android 單元測試之PowerMock的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!