Xcode 10 和 super.tearDown

Xcode 10 and super.tearDown

自 Xcode 10.1(也许 10)以来,当我创建单元测试文件时,我没有调用 super.tearDown() 和 super.setUp() 。

我在发行说明中没有看到这样的变化。

在文档中 https://developer.apple.com/documentation/xctest/xctestcase/understanding_setup_and_teardown_for_test_methods 仍然在这里。

所以我的问题还是应该写super.tearDown()和super.setUp()?

class SomethingTests: XCTestCase {  

    override func setUp() {  
        // Put setup code here. This method is called before the invocation of each test method in the class.  
    }  

    override func tearDown() {  
        // Put teardown code here. This method is called after the invocation of each test method in the class.  
    }  

    func testExample() {  
        // This is an example of a functional test case.  
        // Use XCTAssert and related functions to verify your tests produce the correct results.  
    }  

    func testPerformanceExample() {  
        // This is an example of a performance test case.  
        self.measure {  
            // Put the code you want to measure the time of here.  
        }  
    }  
}  

对于 XCTestCase 的直接子类,不调用 super.setUp() 的行为不会有任何变化。那是因为 setUptearDown 是在顶层具有空实现的模板方法。

虽然行为没有变化,但省略对 super 的调用意味着如果您创建了一个具有多个级别的测试层次结构,则必须将它们添加回去。

你什么时候能拥有不止一个级别?有两种情况:

  • 当您想要为不同的场景重复使用相同的测试时。
  • 当您对 XCTestCase 进行子类化以创建自定义助手时。

这些并不是每天都会发生。但它们确实发生了。决定 "I need it here, but I don't need it there" 是危险的。所以我会一直打电话给 super