2012-12-14 183 views
11

我從來沒有使用單元測試,我瞭解它的用途,但我不知道何時以及如何使用它。XCode單元測試

我想知道什麼時候值得使用單元測試,也許有一些例子。

+2

「時,它是值得的使用單元測試」 - 有些人認爲它總是難免的;我會說這只是大型項目**和**庫所必需的。 – 2012-12-14 18:40:16

+1

搜索[here](http://stackoverflow.com/questions/33207/what-is-the-best-way-to-unit-test-objective-c-code)。有關單元測試選項和教程的完整信息。 – rsswtmr

+1

一個很好的用法是當你有一個應用程序將一個URL連接到一個服務器。您可以在單元測試中單獨設置它們,以測試它們而無需運行應用程序。 –

回答

9

你應該幾乎總是進行單元測試,並且應該用單元測試編寫代碼。 即使在編寫代碼之前,極端主義者也會編寫測試(它被稱爲TDD - 測試驅動開發)。

我給你一個真實的例子:我最近不得不編寫一個支持「間隔」的排序NSArray。意思是,數組應該知道如何插入一個時間間隔並保持排序。

例如,該數組看起來像這樣:[1-3,5-9,12-50]。在這個例子中,數組中有3個區間,你可以看到它們被排序。 在我寫了我的課程(我稱之爲IntervalsArray)之後,我編寫了測試以確保其正確工作,並且如果我或其他人在未來對代碼進行更改,我不會「破壞」它。

下面是一些示例測試(僞代碼):

測試1:

- Create a new IntervalsArray 
- Insert a new interval to the array 
- (TEST) make sure the array has 1 object in it 

試驗2:

- Create a new IntervalsArray 
- Insert 2 intervals into the array: [1-3] and [5-9] 
- (TEST) make sure there are 2 items in the array 
- (TEST) make sure interval [1-3] comes before interval [5-9] 

在最後我不得不像15次測試,以蓋我新陣列的每個方面。

這是good unit-testing with Xcode tutorial

你也可以編寫邏輯測試(比單元測試更復雜)來測試你的UI。閱讀有關UIAutomation的一些信息,這是Apple測試UI的方式。這並不完美,但它非常好。 Here's an excellent tutorial關於此。

如果你認爲自己是一個好的程序員,你應該爲你的代碼編寫單元測試。

+2

「你應該經常進行單元測試」 - 即使是Hello World,對吧? (不,不是,讓我們保持合理,好嗎?) – 2012-12-14 19:54:39

+0

好的,編輯我的答案。 –

+0

@ EliGanem謝謝。 – 2012-12-14 19:58:02

1

任何時候你寫一個具有類的應用程序,這不是你自己的。這是添加單元測試以測試這些類的好時機。

除了最基本的應用程序以外的所有應用程序都有自己的類,所以它幾乎總是個單元測試的好主意。

如果您正在創建其他程序員將使用的庫,或者您將在多個項目中使用這些庫,那麼應始終進行單元測試。

當事情發生變化時,單元測試可以爲您節省大量時間,例如,新版本的OS出來了,用單元測試測試然後測試應用程序會好得多。

3

編寫單元測試任何時候你寫代碼,你將不得不維護。也就是說,如果你想重構任何東西 - 改變代碼但保持行爲。這幾乎是生產代碼的每一點。

「你好,世界」的反例是不打擾你打算扔掉的代碼。一個「秒殺解決方案」就是要弄清楚你如何解決問題。一旦你想出來,扔掉它,然後重新開始。只有這一次,你從測試開始。

調用TDD「極端主義」使其聽起來非理性和不切實際。事實上,一旦你學習TDD,它可以節省時間/金錢。

有關TDD如何工作的示例,請參見Unit Testing Example with OCUnit

13

其他答案告訴但不是真的如何,所以讓我來添加一個答案。

任何你正在編寫的生產代碼,你會不斷的時候,你應該有單元測試它。我在這看到的最有幫助的培訓是以下兩個部分組成的系列視頻:

前五分鐘左右的只是介紹,所以你可以跳到最後。

如何

我正在使用Xcode 7與Swift。

開始一個新項目並添加一個單元測試。

我叫我MyProject。如果您在Project Navigator中打開MyProjectTests組,您將看到Xcode已經爲您創建了名爲MyProjectTest.swift的單元測試文件。

enter image description here

您可以刪除所有的示例方法現在並添加一個新func來測試自己的類方法。請務必在頂部添加行@testable import MyProject。如果您的項目名稱中有空格,請用下劃線替換空格。 (例如,「我的示例項目」將使用@testable import My_Example_Project。)

我遵循命名模式testMethodNameBeingTested_Senario_ExpectedBehavior。單元測試名稱必須以「test」開頭。

我會做這樣的事情:

import XCTest 
@testable import MyProject 

class MyProjectTests: XCTestCase { 

    func testSum_TwoNumbers_ReturnsSum() { 
     // Arrange (set up the needed objects) 
     let myClass = MyClass() 

     // Act (run the method you want to test) 
     let sum = myClass.sum(1, 2) 

     // Assert (test that the behavior is as expected) 
     XCTAssertEqual(sum, 3) 

    } 
} 

當然,因爲我們還沒有加入MyClass類尚未構建失敗。

添加你的課程。

我正在將一個Swift文件添加到MyProject,名爲MyClass

class MyClass { 

    func sum(a: Int, _ b: Int) -> Int { 
     return a + b 
    } 
} 

如果我真的遵循TDD原則,我只會添加函數名稱,而不會返回正確的值。但是爲了簡潔起見,我現在就要談談整個方法。

按測試單元類或方法旁邊的測試按鈕再次運行測試,它應該通過。

要看到它失敗(單元測試的重要組成部分),您可以在MyClasssum方法中執行類似return 0的操作。然後你會看到如下當您運行測試:

enter image description here

你可以回去和解決這個問題,然後添加更多的單元測試。如果你願意,你也可以爲其他單元測試文件製作不同的類。只需右鍵單擊Project Navigator中的MyProjectTest組,然後選擇「New File」,然後選擇Test Case Class。

enter image description here

相關

Xcode UI Test example