目錄
一、概念
二、目的
三、方法
編譯時打樁
鏈接時打樁
運(yùn)行時打樁
一、概念
函數(shù)打樁,就是將一個函數(shù)用另一個函數(shù)實現(xiàn)(樁代碼)進(jìn)行替換,以達(dá)到在原有函數(shù)入口的位置執(zhí)行新的實現(xiàn)。
二、目的
函數(shù)打樁的目的一般是隔離、占位和控制。
- 隔離是指將測試任務(wù)從產(chǎn)品項目中分離出來,使之能夠獨(dú)立編譯、鏈接,并獨(dú)立運(yùn)行。隔離的基本方法就是打樁,將測試任務(wù)之外的,并且與測試任務(wù)相關(guān)的代碼,用樁來代替,從而實現(xiàn)分離測試任務(wù)。
- 占位就是用樁對一些未實現(xiàn)的函數(shù)進(jìn)行占位,多見于協(xié)同開發(fā)中,對于其他人完成的函數(shù)可以先使用樁函數(shù)進(jìn)行占位。
- 控制是指在測試時,人為設(shè)定相關(guān)代碼的行為,使之符合測試需求。
三、方法
編譯時、鏈接時、運(yùn)行時。
編譯時打樁
用宏定義#define,在預(yù)處理時進(jìn)行字符串替換,將原函數(shù)定義成樁函數(shù)的形式。同時可以使用條件編譯來控制編譯選項。
鏈接時打樁
鏈接時打樁就是調(diào)用的函數(shù)庫替換。將樁函數(shù)定義到新的庫文件中,并在原代碼基礎(chǔ)上增加條件編譯選項,屏蔽原有的庫,采用樁函數(shù)庫。
運(yùn)行時打樁
運(yùn)行時打樁就是函數(shù)地址替換。這種方法要復(fù)雜一點(diǎn),但是不需要對原有的代碼進(jìn)行修改,而是額外增加了打樁和還原的操作,在進(jìn)行單元測試時也常用。
簡單來說,就是讀取到原函數(shù)指令的地址,并讀取樁函數(shù)的地址,并使用jmp命令從原函數(shù)跳轉(zhuǎn)到樁函數(shù)去,以實現(xiàn)打樁。需要實現(xiàn)類似
int install_stub(void *orig_f, void *stub_f)
int uninstall_stub(void *stub_f)
參考優(yōu)秀博客:
stub | Simest's Blog (sim41.com)文章來源:http://www.zghlxwxcb.cn/news/detail-443040.html
認(rèn)識單元測試中的打樁_wangwencong的博客-CSDN博客_單元測試 打樁文章來源地址http://www.zghlxwxcb.cn/news/detail-443040.html
到了這里,關(guān)于一文看懂單元測試中的打樁的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!