Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Xcode单元测试_Iphone_Objective C_Ios_Unit Testing - Fatal编程技术网

Iphone Xcode单元测试

Iphone Xcode单元测试,iphone,objective-c,ios,unit-testing,Iphone,Objective C,Ios,Unit Testing,我从来没有使用过单元测试,我了解它的用途,但我真的不知道何时以及如何使用它 我想知道什么时候使用单元测试是值得的,也许可以举一些例子。您几乎应该总是使用单元测试,并且您应该在编写代码时考虑到单元测试。 极端分子甚至在编写代码之前就编写测试(称为TDD-测试驱动开发) 我将给你一个真实的例子:我最近不得不编写一个支持“间隔”的排序NSArray。也就是说,数组应该知道如何插入间隔并保持其排序 例如,数组如下所示:[1-3,5-9,12-50]。在本例中,数组中有3个间隔,如您所见,它们已排序。 在

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


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

您几乎应该总是使用单元测试,并且您应该在编写代码时考虑到单元测试。 极端分子甚至在编写代码之前就编写测试(称为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次测试,涵盖了新阵列的各个方面

这是一个例子

您还可以编写逻辑测试(比单元测试更复杂)来测试UI。了解一下UIAutomation,这是苹果公司测试UI的方式。这并不完美,但相当不错。关于这个


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

任何时候你编写一个有自己的类的应用程序。这是添加单元测试、测试这些类的好时机

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

如果您正在创建其他程序员将使用的库,或者您将在多个项目中使用的库,那么这些库应该始终具有单元测试


当情况发生变化时,单元测试可以为您节省大量时间,例如,新版本的操作系统问世时,使用单元测试比只测试应用程序要好得多。

在编写需要维护的代码时编写单元测试。也就是说,如果你想重构任何东西——改变代码,但保留行为。这几乎是生产代码的每一部分

“Hello,World”的反例是不要为你打算扔掉的代码而烦恼。一个“尖峰解决方案”就是想办法解决一个问题。一旦你弄明白了,扔掉它,重新开始。只有这一次,你从测试开始

将TDD称为“极端分子”听起来是不合理和不切实际的。事实上,一旦你学会了TDD,它可以节省时间/金钱

有关TDD如何工作的示例,请参见。

其他答案说明了时间,但实际上没有说明如何工作,因此让我再添加一个答案

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

  • (第一部分)
  • (第二部分)
前五分钟左右只是介绍,你可以跳到最后

怎么 我将Xcode 7与Swift一起使用

启动新项目并添加单元测试。

我正在调用我的
MyProject
。如果在项目导航器中打开MyProjectTests组,您将看到Xcode已经为您创建了一个名为MyProjectTest.swift的单元测试文件

您现在可以删除所有示例方法,并添加一个新的
func
来测试您自己的类方法。确保在顶部添加行
@testable import MyProject
。如果项目名称中有空格,请将空格替换为下划线。(例如,“我的示例项目”将使用
@testable导入我的示例项目

我遵循
testMethodNameBeingTested\u Senario\u 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
添加一个名为
MyClass
的Swift文件

class MyClass {
    
    func sum(a: Int, _ b: Int) -> Int {
        return a + b
    }
}
按下测试单元类或方法旁边的测试按钮再次运行测试,测试应该通过

要看到它失败(单元测试的一个重要部分),您可以在
MyClass
sum
方法中执行类似于
return0
的操作。运行测试时,您将看到以下内容:

您可以返回并修复此问题,然后添加更多的单元测试。如果愿意,还可以为不同的类生成其他单元测试文件。只需右键单击项目导航器中的MyProjectTest组,选择“新建文件”,然后选择测试用例类

相关的

“当值得使用单元测试时”——一些人认为这总是不可避免的;我想说的是,这只是大型项目和库所必需的。搜索。有关单元测试选项和教程的完整信息。当您有一个可以与服务器建立url连接的应用程序时,这是一个很好的用途。你可以在单元测试中单独设置它们,以便在不运行应用程序的情况下对它们进行测试。我认为随着你编写更多的程序,你会了解到,你对一些看似无关紧要的代码所做的最轻微的更改可能会产生你无法预见的有害后果。单元测试,尤其是当正确完成时,可以帮助防止因轻微的代码更改而产生的错误。你是什么意思
如果我真的遵循TDD原则,我只会添加函数名,而不会返回正确的值?返回正确值的唯一位置是测试(3)。你的意思是在测试中只写函数名?请解释一下。谢谢。@tymac,我想我的意思是编写class方法,让它返回
0
,运行测试