單元測試實踐的主要問題與解決(5)

(承上篇)

ide

3.2  如何解決「作不了」

    
上面咱們只是用一個獨立的函數來演示ETDD過程。在實際的工做中,代碼之間一般是互相依賴的,這種依賴關係會形成測試難於進行,這就是「作不了」的問題。
函數

    咱們首先來分析一下。「作不了」主要是指可測性問題。可測性問題的核心是內部輸入。在解釋內部輸入前,咱們先來看一下通常的輸入:外部輸入。工具

    外部輸入是指在被測代碼的外部能夠設定的輸入,包括參數、成員變量、全局變量。外部輸入通常能夠直接設定。
    
    單元測試的核心難點在於內部輸入,什麼是內部輸入呢?
    像下面這個例子,這兩個數據,都是在被測試代碼的內部,經過調用關聯代碼來取得,也就是內部取得的數據。對於內部取得的數據,代碼要如何處理呢?跟參數同樣,也是分類處理。所以,測試時也要分類檢測,這就是內部輸入。
      
    內部輸入有六種情形,咱們利用工具均可以處理。
    
    解決內部輸入的主要方法有打樁、模擬對象、底層模擬。
    先來介紹打樁。樁就是代替真實代碼的一些代碼。樁的功能主要有隔離、補齊和控制。能夠經過編寫樁代碼,來解決內部輸入問題。這是樁的控制功能。
    
    用打樁來解決內部輸入,有一些問題:一是編寫樁代碼增長了工做量;二是內部輸入和外部輸入分離,難於管理;三是隻能解決部份內部輸入問題。例如,要在一個用例中屢次調用同一關聯函數,要求每次輸出不一樣,樁代碼就很難作到。
    

    解決內部輸入的另外一個方法是模擬對象,這個比較複雜,另外,對於C和C++也不太適用。咱們能夠採用底層模擬來解決內部輸入問題。單元測試

    底層模擬有三個特色:一是內部輸入與外部輸入一塊兒管理;二是不須要考慮關聯代碼的狀態,無所關聯代碼是否存在,是否隔離,均可以直接使用;三是不須要編寫代碼。測試

    下面我也用一個案例來說解一下底層模擬。這個示例,是一個空調控制程序。對象

    代碼的功能,是首先取得環境的溫度,而後與預設的目標溫度比較,計算出溫度差,溫度每差一度,製冷器運行60秒。
    
    首先,咱們設定外部數據。假設,預設的目標溫度是25度,是這個全局變量,設爲25。返回值爲1,表示操做成功。假設環境溫度是28度,那麼,製冷器應該運行180秒,這裏填180。而後執行測試。
    
    因爲環境溫度尚未設定,測試進行不下去。環境溫度由這個函數來取得。即便這個函數能夠正常工做,取到的環境溫度也不可能知足咱們的測試需求。咱們能夠用底層模擬來解決。
     (未完待續)
相關文章
相關標籤/搜索