수색…


Xcode 프로젝트에 테스트 파일 추가하기

프로젝트를 만들 때

프로젝트 생성 대화 상자에서 "Include Unit Tests"를 체크해야합니다.

여기에 이미지 설명을 입력하십시오.

프로젝트를 만든 후

프로젝트를 만드는 동안 해당 항목을 확인하지 못한 경우 나중에 언제든지 테스트 파일을 추가 할 수 있습니다. 그렇게하려면 :

1- Xcode의 프로젝트 설정으로 이동하십시오.

2 - "대상"으로 이동하십시오.

3 - "대상 추가"를 클릭하십시오.

4- "Other"에서 "Cocoa Touch Unit Test Testing Bundle"을 선택하십시오.

마지막에는 [Your app name]Tests.swift 라는 파일이 있어야합니다. Objective-C에서 [Your app name]Tests.h[Your app name]Tests.m 이라는 두 개의 파일이 있어야합니다.

[Your app name]Tests.swift or .m 파일이 기본적으로 포함됩니다.

  • XCTest 모듈 가져 오기
  • A [Your app name]Tests XCTestCase 를 확장하는 [Your app name]Tests 클래스
  • setUp , tearDown , testExample , testPerformanceExample 메소드

빠른

import XCTest

class MyProjectTests: 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.
    }
}

}

목표 -C

#import <XCTest/XCTest.h>

@interface MyProjectTests : XCTestCase

@end

@implementation MyProjectTests

- (void)setUp {
    [super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

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

- (void)testPerformanceExample {
// This is an example of a performance test case.
    [self measureBlock:^{
    // Put the code you want to measure the time of here.
    }];
}

@end

테스트 파일에 스토리 보드 및 뷰 컨트롤러를 인스턴스로 추가

테스트 파일에서 수행되고 View Controller와 Storyboard를 테스트 할 단위 테스트를 시작하려면이 두 파일을 테스트 파일에 도입해야합니다.

보기 컨트롤러 정의하기

빠른

var viewController : ViewController!

스토리 보드 소개 및 View Controller 초기화

이 코드를 setUp() 메서드에 추가합니다.

빠른

let storyboard = UIStoryboard(name: "Main", bundle: nil)
viewController = storyboard.instantiateInitialViewController() as! ViewController

목표 -C

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:"Main" bundle:nil];
viewController = (ViewController *) [storyboard instantiateInitialViewController];

이렇게하면 테스트 메소드를 작성할 수 있으며 오류를 확인할 위치를 알 수 있습니다. 이 경우 View Controller와 Storyboard가 있습니다.

테스트 메소드 추가하기

애플에 따르면 :

시험 방법

테스트 메소드는 접두어 테스트로 시작하고 매개 변수를 취하지 않고 void (예 : (void) testColorIsRed ()를 반환하는 테스트 클래스의 인스턴스 메서드입니다. 테스트 메소드는 프로젝트에 코드를 실행하고 해당 코드가 예상 결과를 생성하지 않으면 일련의 어설 션 API를 사용하여 실패를보고합니다. 예를 들어 함수의 반환 값이 예상 값과 비교되거나 클래스 중 하나에서 부적절한 메서드 사용이 예외를 throw한다고 테스트 할 수 있습니다.

그래서 우리는 메소드의 접두사로 "test"를 사용하는 테스트 메소드를 추가합니다 :

빠른

func testSomething() {

}

목표 -C

- (void)testSomething {

}

실제로 결과를 테스트하기 위해 부울 식을 사용하는 XCTAssert() 메서드를 사용하고 true이면 테스트가 성공한 것으로 표시하고 그렇지 않으면 실패한 것으로 표시합니다.

두 개의 숫자의 합을 계산하는 sum() 이라는 View Controller 클래스의 메소드가 있다고 가정 해 봅시다. 이를 테스트하기 위해 다음과 같은 방법을 사용합니다.

빠른

func testSum(){
    let result = viewController.sum(4, and: 5)
    XCTAssertEqual(result, 9)
}

목표 -C

- (void)testSum {
    int result = [viewController sum:4 and:5];
    XCTAssertEqual(result, 9);
}

노트

기본적으로 Storyboard 파일에서 처음 작성된 경우 테스트 클래스에서 View Controller 클래스의 레이블, 텍스트 상자 또는 기타 UI 항목에 액세스 할 수 없습니다. 이는 View Controller 클래스의 loadView() 메서드에서 초기화되고 테스트 할 때 호출되지 않기 때문입니다. loadView() 및 다른 모든 필수 메소드를 호출하는 가장 좋은 방법은 viewController 속성의 view 속성에 액세스하는 것입니다. UI 요소를 테스트하기 전에 다음 줄을 추가해야합니다.

XCTAssertNotNil(viewController.view)

테스트 시작

특정 메소드 테스트하기

특정 메소드를 테스트하려면 메소드 정의 옆에있는 사각형을 클릭하십시오.

모든 메소드 테스트하기

모든 메소드를 테스트하려면 클래스 정의 옆에있는 사각형을 클릭하십시오.

테스트 결과보기

정의 옆에 녹색 체크 표시가 있으면 테스트가 성공한 것입니다.

여기에 이미지 설명을 입력하십시오.

정의 옆에 적색 십자가가 있으면 테스트가 실패했습니다.

여기에 이미지 설명을 입력하십시오.

모든 테스트 실행

Product -> Test OR Cmd + U

모든 테스트 대상에서 모든 테스트를 실행합니다!

테스트 할 수있는 모듈 가져 오기

클래스, 구조체, 열거 형 및 모든 메서드는 기본적으로 internal 입니다. 즉, 동일한 모듈에서만 액세스 할 수 있습니다. 테스트 케이스가 다른 타겟에 있습니다. 즉, 테스트 케이스가 다른 모듈에 있음을 의미합니다. 테스트하려는 메소드에 액세스하려면 @testable 키워드를 사용하여 테스트 할 모듈을 @testable 합니다.

우리가 ToDo 라고 불리는 메인 모듈을 가지고 있다고 가정 해보자. 우리는 다음과 같은 모듈을 가져올 것입니다 :

@testable import ToDo

이 import 문을 사용하여 파일의 모든 테스트 메소드는 이제 모든 internal 클래스, 구조체, 열거 형 및 ToDo 모듈의 모든 internal 메소드에 액세스 할 수 있습니다.

테스트 대상 요소가있는 파일을 테스트 대상에 추가해서는 안되기 때문에 오류를 디버그하기가 어려울 수 있습니다.

트리거보기로드 및 모양

로딩보기

뷰 컨트롤러에 대한 테스트에서 loadView() 또는 viewDidLoad() 의 실행을 트리거하려는 경우가 있습니다. 뷰에 액세스하면이 작업을 수행 할 수 있습니다. 테스트에서 sut (system under test)라는 뷰 컨트롤러 인스턴스가 있다고 가정하면 코드는 다음과 같습니다.

XCTAssertNotNil(sut.view)

외관보기

다음 코드를 추가하여 viewWillAppear(_:)viewDidAppear(_:) 메소드를 트리거 할 수도 있습니다.

sut.beginAppearanceTransition(true, animated: true)
sut.endAppearanceTransition()

테스트 클래스 작성하기

import XCTest
@testable import PersonApp

class PersonTests: XCTestCase {
    func test_completeName() {
        let person = Person(firstName: "Josh", lastName: "Brown")
        XCTAssertEqual(person.completeName(), "Josh Brown")
    }
}

자 여기서 무슨 일이 일어나는지 토론 해 봅시다. import XCTest 라인은 우리가 확장 할 수 XCTestCase 사용할 XCTAssertEqual (다른 주장들). 확장 XCTestCase 하고 우리의 테스트 이름 접두어 test 프로젝트의 테스트 (⌘U 또는 제품> 테스트)를 실행할 때 엑스 코드가 자동으로이 테스트를 실행되도록합니다. @testable import PersonApp 라인은 PersonApp 타겟을 가져올 PersonApp 위 예제에서 Person 과 같이 클래스를 테스트하고 사용할 수 있습니다. 그리고 마지막으로, 우리 XCTAssertEqualperson.completeName()"Josh Brown" 이라는 문자열과 같은지 확인합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow