回答
你应该几乎总是进行单元测试,并且应该用单元测试编写代码。 即使在编写代码之前,极端主义者也会编写测试(它被称为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连接到一个服务器。您可以在单元测试中单独设置它们,以测试它们而无需运行应用程序。 –