关于setUp()和tearDown()的全部
Xcode运行测试时,它将独立调用每个测试方法。 因此,每种方法都必须准备并清理所有分配。 为此,它具有两个重要的方法setUp()
和tearDown()
。
-
setUp()
—在调用给定类中的每个测试方法之前,将调用此方法。 -
tearDown()
—调用给定类中的每个测试方法后,将调用此方法。
每个类测试都从类 setUp()
方法执行开始。
然后针对每种测试方法
1.分配了一个新的类实例。
2.执行其实例setUp()
方法。
3.运行测试。
4.执行实例tearDown()
方法。
对于该类中的所有测试方法,都将重复此顺序。
在最后一个测试方法之后,当实例tearDown()
已运行时,Xcode将执行类teardown方法。
您可以通过5种不同的方式自定义setUp()
和teardown()
,
1.覆盖setUp()
类方法以设置所有测试方法的初始状态。
2.覆盖setUp()
实例方法以在执行每个测试方法之前重置初始状态。
3.在执行测试方法期间,可以使用addTearDownBlock(_:)
方法使用addTearDownBlock(_:)
的拆卸代码块。
4.覆盖每个测试方法执行后要清除的tearDown()
实例方法。
5.在执行所有测试方法后,重写tearDown()
类方法以进行清理。
让我们检查以下测试的执行情况,
//资源: developer.apple.comclass SetUpAndTearDownExampleTestCase:XCTestCase {
覆盖类func setUp(){// 1。
super.setUp()
//这是setUp()类方法。
//在第一个测试方法开始之前被调用。
//在此处设置所有总体初始状态。
}
覆盖func setUp(){// 2。
super.setUp()
//这是setUp()实例方法。
//在每个测试方法开始之前调用它。
//在此处设置任何每次测试状态。
}
func testMethod1(){// 3。
//这是第一个测试方法。
//您的测试代码在这里。
addTeardownBlock {// 4。
//当testMethod1()结束时调用。
}
}
func testMethod2(){// 5。
//这是第二种测试方法。
//您的测试代码在这里。
addTeardownBlock {// 6。
//当testMethod2()结束时调用。
}
addTeardownBlock {// 7。
//当testMethod2()结束时调用。
}
}
覆盖func tearDown(){// 8。
//这是tearDown()实例方法。
//在每个测试方法完成后调用。
//在此执行每个测试的清理。
super.tearDown()
}
覆盖类func tearDown(){// 9。
//这是tearDown()类方法。
//在所有测试方法完成后调用。
//在此执行所有整体清理。
super.tearDown()
}
}
我们在这里可以看到,在测试方法执行之后注册的拆卸模块在调用测试实例方法之后运行。 拆解块也以后进先出的方式运行。
注意:
setUp()
和tearDown()
类方法是在XCTestCase上定义的,而setUp()
和tearDown()
实例方法是在其基础XCTest上定义的。无论测试方法是通过还是失败,都将调用Teardown块和重写的
tearDown()
方法,即使测试用例的continueAfterFailure
设置为false
。
小费:
您可以在测试用例
setUp()
和tearDown()
实例方法中包括测试断言。但是,您不能在测试用例的
setUp()
和tearDown()
类方法中包括测试断言。 测试断言需要类实例,而该类实例在类方法的范围内不存在。
感谢您的阅读 🎾