天天看點

iOS_Xcode單元測試環境配置

單元測試(unit testing),是指對軟體中的最小可測試單元進行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java裡單元指一個類,圖形化的軟體中可以指一個視窗或一個菜單等。總的來說,單元就是人為規定的最小的被測功能子產品。單元測試是在軟體開發過程中要進行的最低級别的測試活動,軟體的獨立單元将在與程式的其他部分相隔離的情況下進行測試。

  二. Xcode中的UnitTest

  Xcode中內建了單元測試架構OCUnit,可以完成不同側重點的測試。Xcode下的單元測試分為logic uint tests和application unit tests,兩種類型的單元測試都需要對應一個自己的Target。

  logic uint tests在編譯階段進行,并且隻能在模拟器中進行,并且需要配置一個單獨的schemes來運作。主要是針對資料層的各個子產品進行測試,如果資料層的子產品劃分比較理想解耦相對徹底,則可以通過邏輯單元測試對各子產品給出各種輸入,然後對各資料子產品的輸出進行判斷,來判斷各資料子產品是否正常。

  application unit tests在程式運作階段進行,可以在模拟器和真機上進行,可以在應用的schemes或者單獨配置的schemes裡面運作。主要是針對應用中的相對比較重要的類以及部分簡單的界面操作進行測試,完成邏輯單元測試以外的檢測。

  xcode可以通過2種方式建立UnitTest,一種是建立工程時自帶UnitTest,一種時在已有工程添加UnitTest。

  三. Xcode建立帶UnitTest的工程(Xcode 4.6.2)

  如果在建立工程的時候選中

iOS_Xcode單元測試環境配置

  并且建立的工程是一個應用,那麼系統會預設生成application unit tests;建立其它類型的工程選中Include Unit Tests的話,系統預設生成logic uint tests。系統自動生成的測試單元時會自動生成對應的target,并且一個target隻能對應一中類型的單元測試,但可以包含多個測試檔案,針對工程中不同的類進行測試。

  四. Xcode向已有工程添加UnitTest(Xcode 4.6.2)

  如果在建立工程的時候沒有選擇Include Unit Tests的話,則可以手動去添加單元測試。

  下面首先介紹下向工程添加單元測試的target:

  1、選則File->New->New Target,在左側欄中選中iOS->other,右邊選擇Cocoa Touch Unit Tests Bundle,如圖

iOS_Xcode單元測試環境配置
iOS_Xcode單元測試環境配置

  Next後位target完成命名

iOS_Xcode單元測試環境配置

  這樣就完成了向工程中添加單元測試用的target。效果如下

iOS_Xcode單元測試環境配置

  其實按如上步驟添加單元測試target的話,生成的就是一個logic uint tests。

  一般情況下Xcode在你添加新的target的時候會自動的添加一個schemes,該schemes的命名與你添加的target一樣。

iOS_Xcode單元測試環境配置

  如果你不想在建立target的時候建立scheme(因為application unit tests可以在真機和模拟器上運作,并且時在程式運作時進行測試,是以完全可以和應用本身的target共用一個scheme,這樣進行應用單元測試的時候就不用切換scheme。)可以選擇上圖的Manage Schemes,去掉Autocreate schemes,如下圖:

iOS_Xcode單元測試環境配置

為了驗證新的scheme已經加入了建立的target,對這個新添加的scheme進行編輯,你可以在選中左側的Test後看到右邊顯示出新添加的LogicUnitTests Target,說明該scheme已經預設添加了新添加的Target。

iOS_Xcode單元測試環境配置

  建立完target後,可以将建立的target設定成logic unit tests或者application unit tests:

  設定logic unit tests:就像之前所說,如果按上面的步驟添加一個單元測試用的target的話,就已經預設配置成了一個logic unit tests。

  為了确認建立的logic uint tests配置正确,可以進行如下的驗證:

  1、選擇建立的scheme:LogicUnitTests和一個運作目标

iOS_Xcode單元測試環境配置
iOS_Xcode單元測試環境配置

  2、選擇Product ->Test(或者Command+U)

  3、Xcode會顯示Build Successed 和Test failed,選擇

  View -> Navigators -> Issue(或者Command + 4)會有下圖中的結果

iOS_Xcode單元測試環境配置

  選擇View -> Navigators -> Show Log Navigator(Command + 7)

iOS_Xcode單元測試環境配置

  這樣就說明添加的邏輯單元測試運作正确,因為沒有添加測試語句,隻有一個STFail,是以報錯。

  如果在建立工程的時候選擇Include unit tests,則系統會預設生成一個測試target,并配置為application unit tests。

  如果建立工程時沒有選擇包含單元測試,則在建立Logic UnitTest單元測試的Target之後,可以按如下步驟配置application unit tests:

  1、選擇建立的Logic UnitTest單元測試target,并選擇Build Setting欄和“All”

iOS_Xcode單元測試環境配置

  2、在search bar裡面輸入Bundle Loader,将其值設定為$(BUILT_PRODUCTS_DIR)/<app_name>.app/<app_name>

  效果如下

iOS_Xcode單元測試環境配置

 3、搜尋Test Host,設定其值為$(BUNDLE_LOADER)效果如圖

iOS_Xcode單元測試環境配置

  4、使建立的單元測試target依賴與編譯應用的target,效果如圖

iOS_Xcode單元測試環境配置

  5、如果是在建立的時候系統預設建立了scheme,則可以通過新的scheme來進行application tests,如果沒有預設建立scheme,則可以編輯用來編譯工程的scheme,選擇左側的Test如圖:

iOS_Xcode單元測試環境配置

  點選底部的“+”,将單元測試的target添加進來。如圖

iOS_Xcode單元測試環境配置

  這樣原來的logic unit tests就配置成application unit tests了。可以按運作logic unit tests的方法運作application unit tests,來驗證是否配置正确。

iOS_Xcode單元測試環境配置

  選擇Product ->Test(或者Command+U)

iOS_Xcode單元測試環境配置

  可以對比Logic UnitTest 運作完的report和 Application UnitTest運作的report有不一樣的地方,就是上圖方框這一欄 Application UnitTest

  有 “Run test suit all tests” 這一欄。