Xcode单元测试

k20*_*k20 13 iphone unit-testing objective-c ios

我从来没有使用过单元测试,我理解它的用途,但我真的不知道何时以及如何使用它.

我想知道什么时候使用单元测试是值得的,也许有一些例子.

Sur*_*gch 15

其他答案告诉我什么时候,但不是真的如何,所以让我也添加一个答案.

什么时候

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

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

怎么样

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

    }
}
Run Code Online (Sandbox Code Playgroud)

当然,构建失败是因为我们还没有添加MyClass类.

添加你的课程.

我正在添加一个Swift文件来MyProject调用MyClass.

class MyClass {

    func sum(a: Int, _ b: Int) -> Int {
        return a + b
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我真的遵循TDD原则,我只会添加函数名称,而不是返回正确的值.但为简洁起见,我现在只对整个方法.

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

要看到它失败(单元测试的重要组成部分),你可以做类似return 0sum方法MyClass.然后,当您运行test时,您会看到以下内容:

在此输入图像描述

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

在此输入图像描述

有关

Xcode UI测试示例


Eli*_*nem 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
Run Code Online (Sandbox Code Playgroud)

测试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]
Run Code Online (Sandbox Code Playgroud)

最后,我有15个测试来覆盖我的新阵列的每个方面.

这是一个很好的单元测试与Xcode教程.

您还可以编写逻辑测试(比单元测试更复杂)来测试UI.阅读一下UIAutomation,这是Apple测试UI的方式.它并不完美,但它非常好.这是关于此的优秀教程.

如果你认为自己是一个优秀的程序员,你应该为你的代码编写单元测试.