《PowerMock实战手册》读书笔记及个人总结
文章目錄
- 前言
- 依賴及注解
- mock local variable
- mock static
- mock final class / method
- mock constructors
- mock private methods
前言
注:本文總結(jié)源自汪文君的e-book 《PowerMock 實(shí)戰(zhàn)手冊(cè)》, pdf不知道為何導(dǎo)入不了,以下是隨書筆記。
pdf我保存在了百度云里,需要的可以自取
《PowerMock實(shí)戰(zhàn)手冊(cè)》
鏈接: 密碼: 6hm4
本文目的:通過強(qiáng)大的 mock 編寫出更好的測(cè)試用例,幫助實(shí)現(xiàn) Free Bug
前提:具備 mockito 的語法基礎(chǔ),如果不懂,請(qǐng)移步:
mockito官網(wǎng)文檔
mock 基本套路:
- 創(chuàng)建 mock 對(duì)象
- 模擬 mock 行為
- 調(diào)用待測(cè)試方法
- 驗(yàn)證 mock 行為(確認(rèn) mock 部分被成功模擬)
github文檔
參考書籍:《Instant Mock Testing with PowerMock》
TDD框架我一般用Mockito,但是只要稍用一段時(shí)間就會(huì)發(fā)現(xiàn)它在實(shí)際項(xiàng)目中有很多解決不了的事情,因此出現(xiàn)了PowerMock,
專治各種不服【static / constructor / final / private / local variable】
補(bǔ)充:如果每次遇到這些代碼都選擇注釋,測(cè)起來非常麻煩,還是盡量能嵌入項(xiàng)目中,運(yùn)用更強(qiáng)大的 mock,但實(shí)際項(xiàng)目中很可能還沒這么簡(jiǎn)單嵌入,之后實(shí)際工作中總結(jié)了經(jīng)驗(yàn)再來補(bǔ)充。
另外,這些知識(shí),看看就好,寫點(diǎn) demo,真正用到的時(shí)候再完整的來兩遍,就會(huì)了,主要是會(huì)基本 demo,并且在工作測(cè)試的時(shí)候用到了能想到來這里查找和運(yùn)用測(cè)試方法,讓測(cè)試更簡(jiǎn)單。根據(jù)使用頻率,決定自己相關(guān)需要使用的技術(shù)需要熟練到什么程度即可,大可把它們當(dāng)做參考手冊(cè)對(duì)待,不必牢記于心,網(wǎng)上用例一搜一大把。
依賴及注解
https://mvnrepository.com/
- powermock-module-junit4
- powermock-api-mockito
找到以上依賴(版本不一樣可能會(huì)出現(xiàn)意想不到的問題),引入到本地的 pom 文件中
以下兩個(gè)注解在測(cè)試 mockito 無法測(cè)試的內(nèi)容時(shí)必須的,標(biāo)注在待測(cè)試類上
@RunWith(PowerMockRunner.class)
告訴 junit 使用某個(gè)指定 Runner 運(yùn)行 testCase ,不指定默認(rèn)用 junit 的 Runner
@PrepareForTest(EmployeeService.class)
為 PowerMock 的 Runner 提前準(zhǔn)備一個(gè)已經(jīng)根據(jù)某種預(yù)期改變過的 class,如需添加更多,改成類似這種即可:@PrepareForTest({EmployeeService.class, EmployeeUtils.class})
mock local variable
- 有返回值
- 無返回值
只能用 mock 的 verify 判斷是否被調(diào)用
mock static
- 有返回值
- 無返回值
mock final class / method
同上
mock constructors
- 有參構(gòu)造
whenNew(EmployeeDao.class).withArguments(false, MYSQL).thenReturn(employeeDao);
參數(shù)匹配器
包含請(qǐng)求和回答參數(shù),還是參考這里
mockito官網(wǎng)文檔
PowerMockito.when(employeeService.xxx).then(new Answer() {
@override
public String answer(InvocationOnMock invocation) throws Throwable {
…分支
}
})
spy:只mock 一個(gè)對(duì)象的個(gè)別方法行為,保留對(duì)某些方法原始的業(yè)務(wù)邏輯
mock private methods
public class EmployeeService {private void checkExist(String userName) {throw new UnsupportedOperationException();} } PowerMockito.doNothing().when(employeeService, "checkExist", "wangwenjun");employeeService.checkExist("wangwenjun");PowerMockito.verifyPrivate(employeeService).invoke("checkExist","wan gwenjun");總結(jié)
以上是生活随笔為你收集整理的《PowerMock实战手册》读书笔记及个人总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动web开发适配rem
- 下一篇: php的addslashes,PHP a