Swift for iOS中的单元测试-完整指南

了解如何实施单元测试。

在我以前的文章中,我们讨论了什么是单元测试以及为什么要在iOS开发中包括它。

在本文中,我将使用一个非常基本的示例介绍如何在Swift中编写测试类和方法。

创建一个项目:

如果创建一个新项目:

  1. 开启Xcode
  2. 创建一个“单视图应用程序”,并根据需要命名。 就我而言,它将被命名为UnitTestExample。
  3. 点击“包含单元测试”

打开一个现有项目

如果打开没有添加单元测试的现有项目:

  1. 转到“项目设置”
  2. 确保选择了主要目标
  3. 单击底部的“ +”按钮。
  4. 选择“ iOS单元测试包”,然后单击“下一步”。

现在,您应该已经添加了测试类文件。 您还将在目标列表中看到测试目标。

让我们打开ViewController文件并编写一个简单的扩展名。

 扩展Int { 
  func Cube()-> Int { 
 返回自我*自我*自我 
  } 
  } 

此扩展名返回一个整数的立方。

现在,让您在测试类文件中使用XCTest测试此扩展。

使用前面的步骤添加测试类文件时,它会自动生成一些方法,包括“ setUp”,“ tearDown”,“ testCaseExample”和“ PerformanceExample”。 我们将在本文的稍后部分介绍每种方法。 现在,我建议您删除XCTest类中的所有内容。

现在,将其替换为以下代码。

 导入XCTest 
@testable导入UnitTestExample
  class UnitTestExampleTests:XCTestCase { 

func testCube(){

令val = 4

让res = val.Cube()

XCTAssertEqual(res,64)

}
}

让我们一次遍历此代码一行。

编写测试类的第一步是通过在声明类之前添加@testable import 来导入主项目。

其次,在XCTestCase中,声明一个函数来测试您的扩展。 我更喜欢在扩展名或函数的原始名称之前添加“ test”作为前缀。

在新函数中,为想要多维数据集的值声明一个变量(在我们的示例中为“ val”)(因为扩展名返回一个整数的多维数据集)。

为扩展结果声明另一个变量(在我们的示例中为“ res”)。 在我们的例子中,“ val.cube()”,其中“ val”是在上面声明的变量,“ cube()”是我们先前编写的扩展名。

在这一点上,我们将跳入测试断言的一个重要概念。 iOS中单元测试的核心是您要根据“预期值”检查方法或案例。 根据上面的示例,如果val为4,我们的预期结果为64(4的多维数据集)。 如果“ res”是任何其他值,则测试将失败。 只有在“ res”为64且“ val”为4时,它才会通过。我们正在使用称为XCTAssertEqual的测试断言进行测试,该断言实质上是在检查“ res”是否为64。还有其他各种测试断言我们将在本文的后续部分进行介绍。

这就是编写第一个单元测试的全部。 要测试这种情况,您需要构建(cmd + b)项目,然后单击已声明的测试函数左侧的行号。 这将触发测试!

现在,假设您要测试功能而不是扩展。 在这里,我编写了与ViewController中的函数相同的方法。

  func CubeFunc(x:Int)-> Int { 
 返回x * x * x 
  } 

为了对此进行测试,我们必须遵循与上述类似的步骤。 但是,这一次我们必须添加一个附加项。 我们必须在XCTest中声明并启动ViewController。 测试函数可以遵循ViewController声明。

 导入XCTest 
@testable导入UnitTestExample

class UnitTestExampleTests:XCTestCase {

func testCube(){

令val = 4
让res = val.Cube()

XCTAssertEqual(res,64)

}

var vc = ViewController()

func testCubeFunc(){

令val = 4
让res = vc.CubeFunc(x:val)

XCTAssertEqual(res,64)

}
}

如您所见,变量“ vc”在声明ViewController。

使用XCTest中的“ vc.CubeFunc()”调用ViewController中的函数CubeFunc()。

这是一个非常基本的示例,但请想象一下,在编写代码时如何轻松地测试复杂的方法。 想象一下如何在以前的项目中实现单元测试。 想象一下,单元测试如何使您免于经历那些漫长的调试会话。

测试断言

上面的示例使用了称为XCTAssertEqual的相等性测试声明。 根据您的方法和要求,您还可以使用其他各种测试断言。 为了使我们所有人容易使用,我为所有可用的测试断言编制了以下易于阅读的列表:

1.关于值,可选值,数组和字典的等式和不等式测试断言

  • XCTAssertEqual —断言两个值相等
  • XCTAssertNotEqual —断言两个值不相等

2.布尔断言。

  • XCTAssertTrue —断言一个表达式为true。
  • XCTAssertFalse —断言表达式为false。

3.无和非零断言。

  • XCTAssertNil —断言一个表达式为nil。
  • XCTAssertNotNil —断言表达式不是nil。

4.可比价值断言。

  • XCTAssertGreaterThan —断言一个值大于另一个值。
  • XCTAssertGreaterThanOrEqual —断言一个值大于或等于另一个。
  • XCTAssertLessThanOrEqual —断言一个值小于或等于另一个值。
  • XCTAssertLessThan —断言一个值小于另一个值。

5.错误断言。

  • XCTAssertThrowsError —断言一个表达式引发错误。
  • XCTAssertNoThrow —断言一个表达式不会引发错误。

6.无条件失败。

  • XCTFail —立即无条件产生故障。

除了这些断言,您还应该阅读异步测试和期望。 我还将在以后的一篇文章中介绍它。

同时,尝试上面列出的这些测试断言,让我知道您的想法。

感谢您的阅读! 如果您喜欢这篇文章,请拍手并订阅。 我也将感谢您的宝贵反馈,以便改善以下帖子。