XCTestCase子类如何实例化的过程是什么?

时间:2017-04-04 13:01:31

标签: ios swift oop xctest xctestcase

我理解一个类是未来对象的蓝图,我试图使用Swift更好地掌握OOP架构。所以我的问题是,从类和实例角度运行测试时会发生什么过程。我不认为我实际上已经创建了我的XCTestCase子类的实例,但Xcode似乎自动执行此操作。当我正在构建更多激情项目应用程序时,我通常必须创建一个实例才能使用它,但在测试中我没有那种感觉,它只是通过命中(Command + U)。我想了解一个实例是否甚至可以创建,如果是这样的话?

以下是蓝图XCTestCase子类的一些示例代码,但我从来没有必要实际实例化此类:

import XCTest
@testable import FirstDemo

class FirstDemoTests: XCTestCase {

    override func setUp() {
        super.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.
        super.tearDown()
    }

    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.
        }
    }

}

2 个答案:

答案 0 :(得分:1)

XCTestCase类的实例化方式与所有其他类相同。

只是它们是在separate process中创建的,并且所有内容都由XCTest框架管理,要么运行所有测试,要么实例化与测试目标相关的所有类,要么选择单独的测试,单独的类是实例

您可以在此处调查XCTest源代码:https://github.com/apple/swift-corelibs-xctest

答案 1 :(得分:1)

当您运行应用程序时,您的代码不负责创建应用程序委托:UIKit框架承担此责任。

同样,当您运行测试时,测试运行器负责实例化您的测试用例。它通过搜索所有已加载类的列表来查找它们是一种XCTestCase。然后它询问每个类的测试调用。然后,它可以为这些测试方法创建测试用例实例并运行测试。

这是如何工作的关键是Objective-C运行时提供的丰富元数据以及它提供的元编程接口,用于询问和操纵该信息。