关于setUp()和tearDown()的全部

Xcode运行测试时,它将独立调用每个测试方法。 因此,每种方法都必须准备并清理所有分配。 为此,它具有两个重要的方法setUp()tearDown()

  1. setUp() —在调用给定类中的每个测试方法之前,将调用此方法。
  2. 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()类方法中包括测试断言。 测试断言需要类实例,而该类实例在类方法的范围内不存在。


感谢您的阅读 🎾