Swift for iOS中的单元测试-完整指南
了解如何实施单元测试。
在我以前的文章中,我们讨论了什么是单元测试以及为什么要在iOS开发中包括它。
在本文中,我将使用一个非常基本的示例介绍如何在Swift中编写测试类和方法。
创建一个项目:
如果创建一个新项目:
- 开启Xcode
- 创建一个“单视图应用程序”,并根据需要命名。 就我而言,它将被命名为UnitTestExample。
- 点击“包含单元测试”
打开一个现有项目
如果打开没有添加单元测试的现有项目:
- 转到“项目设置”
- 确保选择了主要目标
- 单击底部的“ +”按钮。
- 选择“ 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 —立即无条件产生故障。
除了这些断言,您还应该阅读异步测试和期望。 我还将在以后的一篇文章中介绍它。
同时,尝试上面列出的这些测试断言,让我知道您的想法。
感谢您的阅读! 如果您喜欢这篇文章,请拍手并订阅。 我也将感谢您的宝贵反馈,以便改善以下帖子。