Xcode unit testing
我从未使用过单元测试,我了解它的用途,但我不知道何时以及如何使用它。
我想知道什么时候使用单元测试才是值得的,也许还有一些例子。
其他的答案告诉我什么时候,但不是怎么回答,所以让我也加一个答案。
什么时候?每当您编写要保存的生产代码时,都应该对其进行单元测试。我在这方面看到的最有用的培训是以下两部分的视频系列:
- 了解测试驱动开发(第1部分)
- Roy Osherove的单元测试最佳实践(第2部分)
前五分钟左右只是介绍,所以你可以跳到最后。
怎么我正在使用Xcode 7和Swift。
启动新项目并添加单元测试。
我叫我的
您现在可以删除所有示例方法,并添加一个新的
我遵循的是
我会这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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) } } |
当然,构建失败,因为我们还没有添加
添加你的类。
我正在向
1 2 3 4 5 6 | class MyClass { func sum(a: Int, _ b: Int) -> Int { return a + b } } |
按测试单元类或方法旁边的测试按钮再次运行测试,测试应该通过。
要看到它失败(单元测试的一个重要部分),您可以在
您可以返回并修复此问题,然后添加更多单元测试。如果您愿意,还可以为不同的类创建其他单元测试文件。只需右键单击项目导航器中的MyProjectTest组并选择"新建文件",然后选择测试用例类。
相关的Xcode UI测试示例
您几乎应该总是进行单元测试,并且应该在编写代码时考虑单元测试。极端分子甚至在编写代码之前就开始编写测试(称为TDD——测试驱动开发)。
我给你举一个现实生活中的例子:我最近不得不编写一个支持"间隔"的排序NSarray。也就是说,数组应该知道如何插入一个间隔并保持其排序。
例如,数组如下所示:[1-3,5-9,12-50]。在本例中,数组中有3个间隔,如您所见,它们是经过排序的。在我写完我的课程(我称之为Intervalsarray)之后,我必须编写测试来确保它正常工作,并且如果我或其他人将来对代码进行更改,我不会"破坏"它。
以下是一些示例测试(伪代码):
试验1:
1 2 3 | - Create a new IntervalsArray - Insert a new interval to the array - (TEST) make sure the array has 1 object in it |
试验2:
1 2 3 4 | - 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个测试来覆盖新阵列的各个方面。
这里有一个很好的Xcode单元测试教程。
您还可以编写逻辑测试(比单元测试更复杂)来测试您的UI。阅读一点有关uiautomation的内容,这是苹果测试ui的方法。它不完美,但很好。这是一个很好的教程。
如果你认为自己是一个好的程序员,你应该为你的代码编写单元测试。
在编写必须维护的代码时编写单元测试。也就是说,如果你想重构任何东西——改变代码,但保持行为。这几乎是所有生产代码。
"hello,world"的反例是不要为你打算丢弃的代码操心。一个"尖峰解决方案"只是想知道如何处理一个问题。一旦你弄明白了,扔掉它,重新开始。只有这一次,你才从测试开始。
把TDD称为"极端主义者"让它听起来不合理和不切实际。事实上,一旦你学习了TDD,它就节省了时间/金钱。
有关TDD如何工作的示例,请参阅带有ocunit的单元测试示例。
任何时候编写的应用程序都有类,而这些类不是您自己的类。这是添加单元测试、测试这些类的好时机。
除了最基本的应用程序之外,所有的应用程序都有自己的类,所以单元测试几乎总是一个好主意。
如果您正在创建其他程序员将使用的库,或者您将在多个项目中使用的库,那么这些库应该始终具有单元测试。
当事情发生变化时,单元测试可以节省很多时间,例如,一个新版本的操作系统出现了,用单元测试来测试比仅仅测试应用程序要好得多。