1. 程式人生 > >認識單元測試中的打樁

認識單元測試中的打樁



       什麼是樁

       樁,或稱樁程式碼,是指用來代替關聯程式碼或者未實現程式碼的程式碼。如果函式BB1來代替,那麼,B稱為原函式,B1稱為樁函式。打樁就是編寫或生成樁程式碼。

       打樁的目的

       打樁的目的主要有:隔離、補齊、控制。

       隔離是指將測試任務從產品專案中分離出來,使之能夠獨立編譯、連結,並獨立執行。隔離的基本方法就是打樁,將測試任務之外的,並且與測試任務相關的程式碼,用樁來代替,從而實現分離測試任務。例如函式A呼叫了函式B,函式B又呼叫了函式CD,如果函式B用樁來代替,函式A就可以完全割斷與函式CD的關係。

       補齊是指用樁來代替未實現的程式碼,例如,函式A

呼叫了函式B,而函式B由其他程式設計師編寫,且未實現,那麼,可以用樁來代替函式B,使函式A能夠執行並測試。補齊在並行開發中很常用。

       控制是指在測試時,人為設定相關程式碼的行為,使之符合測試需求。例如:

externint B();

int A()

{

int ret = B();

if(ret == 0)

           ;//do something

elseif(ret == 1)

           ;//do something

    else

           ;//do something

return ret;

}

        如果函式B返回隨機數,或者返回網路狀態,或者返回環境溫度,等等,則當呼叫其實際程式碼時,函式A

很難測試,這時可以用樁函式B1來代替B,使其返回測試所需要的資料。

        一個樁函式,可能既具有控制功能,又具有隔離或補齊功能。

        編寫樁

        一般來說,樁函式要具有與原函式完全一致的原形,僅僅是實現不同,這樣測試程式碼才能正確連結到樁函式。

        用於實現隔離和補齊的樁函式一般比較簡單,只需把原函式的宣告拷過來,加一個空的實現,能通過編譯連結就行了。

       比較複雜的是實現控制功能的樁函式,要根據測試的需要,輸出合適的資料,下面是一個示例:

//獲取環境溫度。溫度由出參pTemperature輸出,返回值表示獲取溫度是否成功,如果成功,則返回1

,否則返回0

int GetTemperature(int* pTemperature)

{

if(caseNameIs("failed"))

return 0;

if(caseNameIs("ok-23"))

      {

           *pTemperature = 23;

return 1;

      }

if(caseNameIs("ok-25"))

      {

           *pTemperature = 25;

return 1;

      }

if(caseNameIs("ok-28"))

      {

           *pTemperature = 28;

return 1;

      }

return 0;

}

       其中,caseNameIs()是由測試工具提供的API,用於判斷用例的名稱。程式碼根據用例名稱來決定輸出資料。