回答
你應該幾乎總是進行單元測試,並且應該用單元測試編寫代碼。 即使在編寫代碼之前,極端主義者也會編寫測試(它被稱爲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關於此。
如果你認爲自己是一個好的程序員,你應該爲你的代碼編寫單元測試。
「你應該經常進行單元測試」 - 即使是Hello World,對吧? (不,不是,讓我們保持合理,好嗎?) – 2012-12-14 19:54:39
好的,編輯我的答案。 –
@ EliGanem謝謝。 – 2012-12-14 19:58:02
任何時候你寫一個具有類的應用程序,這不是你自己的。這是添加單元測試以測試這些類的好時機。
除了最基本的應用程序以外的所有應用程序都有自己的類,所以它幾乎總是個單元測試的好主意。
如果您正在創建其他程序員將使用的庫,或者您將在多個項目中使用這些庫,那麼應始終進行單元測試。
當事情發生變化時,單元測試可以爲您節省大量時間,例如,新版本的OS出來了,用單元測試測試然後測試應用程序會好得多。
編寫單元測試任何時候你寫代碼,你將不得不維護。也就是說,如果你想重構任何東西 - 改變代碼但保持行爲。這幾乎是生產代碼的每一點。
「你好,世界」的反例是不打擾你打算扔掉的代碼。一個「秒殺解決方案」就是要弄清楚你如何解決問題。一旦你想出來,扔掉它,然後重新開始。只有這一次,你從測試開始。
調用TDD「極端主義」使其聽起來非理性和不切實際。事實上,一旦你學習TDD,它可以節省時間/金錢。
有關TDD如何工作的示例,請參見Unit Testing Example with OCUnit。
其他答案告訴當但不是真的如何,所以讓我來添加一個答案。
當
任何你正在編寫的生產代碼,你會不斷的時候,你應該有單元測試它。我在這看到的最有幫助的培訓是以下兩個部分組成的系列視頻:
前五分鐘左右的只是介紹,所以你可以跳到最後。
如何
我正在使用Xcode 7與Swift。
開始一個新項目並添加一個單元測試。
我叫我MyProject
。如果您在Project Navigator中打開MyProjectTests組,您將看到Xcode已經爲您創建了名爲MyProjectTest.swift的單元測試文件。
您可以刪除所有的示例方法現在並添加一個新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原則,我只會添加函數名稱,而不會返回正確的值。但是爲了簡潔起見,我現在就要談談整個方法。
按測試單元類或方法旁邊的測試按鈕再次運行測試,它應該通過。
要看到它失敗(單元測試的重要組成部分),您可以在MyClass
的sum
方法中執行類似return 0
的操作。然後你會看到如下當您運行測試:
你可以回去和解決這個問題,然後添加更多的單元測試。如果你願意,你也可以爲其他單元測試文件製作不同的類。只需右鍵單擊Project Navigator中的MyProjectTest組,然後選擇「New File」,然後選擇Test Case Class。
相關
- 1. 單元測試xcode 4
- 2. xcode 4.3單元測試
- 3. XCode中的單元測試
- 4. Xcode 4.4單元測試
- 5. Xcode中的單元測試問題
- 6. 使用Cocoapods進行Xcode單元測試
- 7. 單元測試用例在Xcode
- 8. 單元測試上的XCode 7
- 9. XCode 4 - '包括單元測試'
- 10. 單元測試在Xcode 7中崩潰
- 11. Xcode 4.2,無法運行單元測試
- 12. 在Xcode 5中使用單元測試
- 13. Xcode 5:單元測試沒有運行
- 14. 單元測試不離開Xcode
- 15. tearDown在單元測試的Xcode
- 16. Xcode單元測試不承認無?
- 17. 單元測試+雪豹+ xcode 3.2.2
- 18. Xcode無法識別單元測試
- 19. Xcode中的開始單元測試
- 20. XCode 4單元測試:在運行時測試遊戲
- 21. OCUnit/XCode單元測試的良好測試運行器
- 22. 單元測試測試
- 23. CakePHP測試 - 單元測試
- 24. 從Xcode 3升級到Xcode 4打破單元測試
- 25. 單元測試
- 26. 單元測試
- 27. 單元測試
- 28. 單元測試
- 29. 單元測試
- 30. 單元測試
「時,它是值得的使用單元測試」 - 有些人認爲它總是難免的;我會說這只是大型項目**和**庫所必需的。 – 2012-12-14 18:40:16
搜索[here](http://stackoverflow.com/questions/33207/what-is-the-best-way-to-unit-test-objective-c-code)。有關單元測試選項和教程的完整信息。 – rsswtmr
一個很好的用法是當你有一個應用程序將一個URL連接到一個服務器。您可以在單元測試中單獨設置它們,以測試它們而無需運行應用程序。 –