Xcode单元测试

时间:2012-12-14 18:38:33

标签: iphone objective-c ios unit-testing

我从未使用过单元测试,我理解它的用途,但我不知道何时以及如何使用它。

我想知道何时值得使用单元测试,可能还有一些例子。

4 个答案:

答案 0 :(得分:15)

其他答案告诉何时但不是如何,所以我也要添加一个答案。

每当您编写要保留的生产代码时,都应该对其进行单元测试。我在这看到的最有用的培训是以下两部分视频系列:

前五分钟左右只是介绍,所以你可以跳到最后。

如何

我正在使用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类。

添加课程。

我正在向名为MyProject的{​​{1}}添加一个Swift文件。

MyClass

按下测试单元类或方法旁边的测试按钮再次运行测试,它应该通过。

要查看它失败(单元测试的一个重要部分),您可以在class MyClass { func sum(a: Int, _ b: Int) -> Int { return a + b } } return 0方法中执行sum之类的操作。然后在运行test时会看到以下内容:

enter image description here

您可以返回并修复此问题,然后添加更多单元测试。如果您愿意,还可以为不同的类创建其他单元测试文件。只需右键单击Project Navigator中的MyProjectTest组,然后选择“New File”,然后选择Test Case Class。

enter image description here

相关

Xcode UI Test example

答案 1 :(得分:13)

您应该几乎总是进行单元测试,并且应该考虑单元测试编写代码。 极端分子甚至在编写代码之前编写测试(称为TDD - 测试驱动开发)。

我将给你一个真实的例子:我最近不得不编写一个支持“间隔”的已排序的NSArray。意思是,数组应该知道如何插入一个区间并保持它的排序。

例如,数组看起来像这样:[1-3,5-9,12-50]。在此示例中,数组中有3个间隔,您可以看到它们已排序。 在我写完课程后(我称之为IntervalsArray),我 HAD 编写测试以确保它正常工作,如果我或其他人对代码进行更改,我将不会“破坏”它在将来。

以下是一些示例测试(伪代码):

测试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 :(得分:3)

在编写必须维护的代码时编写单元测试。也就是说,如果你想重构任何东西 - 改变代码但保持行为。这几乎是生产代码的每一点。

“Hello,World”的反例并不是要打扰你打算抛弃的代码。 “尖峰解决方案”只是为了弄清楚如何解决问题。一旦你弄明白了,扔掉它然后重新开始。只有这一次,你才开始测试。

称TDD为“极端分子”使其听起来不合理且不切实际。事实上,一旦你学习了TDD,它就可以节省时间/金钱。

有关TDD如何工作的示例,请参阅Unit Testing Example with OCUnit

答案 3 :(得分:1)

任何时候你编写一个包含类的应用程序,而不是你自己的类。这是添加单元测试以测试这些类的好时机。

除了最基本的应用程序之外的所有应用程序都有自己的类,因此单元测试几乎总是一个好主意。

如果您正在创建其他程序员将使用的库,或者您将在多个项目中使用的库,则应始终进行单元测试。

当事情发生变化时,单元测试可以节省大量时间,例如,新版本的操作系统出现,使用单元测试进行测试然后测试应用程序要好得多。

相关问题