2017-04-04 15 views
2

클래스가 미래 객체의 청사진임을 이해하고 Swift를 사용하여 OOP 아키텍처를 더 잘 이해하려고 시도하고 있습니다. 그래서 제가 가진 질문은 클래스와 인스턴스 관점에서 테스트를 실행할 때 일어나는 프로세스는 무엇입니까? 필자는 실제로 내 XCTestCase 서브 클래스의 인스턴스를 생성했다고 생각하지 않지만 Xcode는이 작업을 자동으로 수행하는 것으로 보입니다. 더 많은 열정 프로젝트 앱을 제작할 때마다 그것을 사용하기 위해 인스턴스를 만들어야하지만 테스팅에서는 그 느낌을 얻지 못하고 그냥 Command + U를 눌러서 작동합니다. 나는 인스턴스가 심지어 전혀 생성되는지 이해하고 싶습니다. 그렇다면 어떻게해야할까요?XCTestCase 하위 클래스가 인스턴스화되는 프로세스는 무엇입니까?

여기 청사진 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. 
     } 
    } 

} 

답변

1

XCTestCase 클래스는 다른 클래스와 같은 방식으로 인스턴스화된다.

그 자체가 separate process으로 생성되고 모든 것이 XCTest 프레임 워크에 의해 관리되며 모든 테스트를 실행하고 테스트 대상과 관련된 모든 클래스가 인스턴스화됩니다. 별도의 테스트를 선택하거나 별도의 클래스가 인스턴스화됩니다.

당신은 여기 XCTest 소스 코드를 조사 할 수 있습니다 : 당신이 당신의 응용 프로그램을 실행하면 https://github.com/apple/swift-corelibs-xctest

1

를, 코드 앱 대리자를 만들기위한 책임을지지 않습니다 다음 UIKit 프레임 워크는 이러한 책임에 걸립니다.

마찬가지로 테스트를 실행하면 테스트 러너가 테스트 사례를 인스턴스화해야합니다. XCTestCase의 일종 인로드 된 클래스 목록을 검색하여이를 찾습니다. 그런 다음 각 클래스에 테스트 호출을 요청합니다. 그런 다음 해당 테스트 메소드에 대한 테스트 케이스 인스턴스를 작성하고 테스트를 실행할 수 있습니다.

이 기능의 핵심은 Objective-C 런타임이 제공하는 풍부한 메타 데이터와 해당 정보를 조사하고 조작하는 메타 프로그래밍 인터페이스입니다.