Waitforexpectationswithtimeout 문서
대기 시간 외 관련 문서
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
XCTestCase waitForExpectationsWithTimeout : handler : 기대가 충족되지 않을 때 EXC_BAD_ACCESS를 throw합니다.
XCTestExpectation을 사용하여 비동기 호출을 테스트하고 있습니다.
completionHandler가 주어진 1 초의 타임 아웃 전에 실행될 때 다음 코드는 작동한다 (테스트는 성공한다).
그러나 completionHandler가 호출되지 않아 기대가 충족되지 않으면 waitForExpectationsWithTimeout을 호출 할 때 테스트 실패가 발생하는 대신 EXC_BAD_ACCESS가 표시됩니다. 이는 전체 테스트 스위트 결과를 볼 수 없기 때문에 매우 편리하지 않습니다.
어떻게 이것을 피하고 정상적인 테스트 실패를 얻을 수 있습니까?
EXC_BAD_ACCESS의 원인은 기대를 생성 할 때 nil 설명을 전달하는 것입니다.
이 호출에 문자열을 전달하면 예상이 충족되지 않을 때 예상되는 테스트 실패가 발생합니다.
Xcode 6의 비동기 유닛 테스트.
작년에 Xcode 5에서 비동기 유닛 테스트를 구현하는 방법을 설명했습니다.
비동기 단위 테스트에서 문제를 상기시켜줍니다. iOS 플랫폼 자체의 많은 API는 비동기식입니다. 그들은 콜백 호출을 사용하여 완료되었을 때 신호를 보내고 다른 대기열에서 실행될 수 있습니다. 네트워크 요청을하거나 로컬 파일 시스템에 쓸 수 있습니다. 이러한 작업은 백그라운드에서 실행해야하는 시간 소모적 인 작업 일 수 있습니다. 테스트 자체가 동 기적으로 실행되므로 문제가 발생합니다. 따라서 우리의 테스트는 실행중인 작업이 완료되었을 때까지 기다릴 필요가 있습니다.
나는 단위 테스트에서 부울 플래그를 설정하고 플래그가 false로 설정 될 때까지 while () 루프에서 반복하여 테스트가 올바르게 완료되도록하는 메소드를 제안했습니다. 이 방법은 대부분의 경우에 효과가 있었지만 조금만 더 생각하면 행복하지 않았습니다. 그 블로그 게시물에서 나는 결론을 내렸다.
이 기술에 대한 내 예약은 여전히 있지만 Xcode의 비동기 유닛 테스트를위한 완벽한 솔루션을 찾고 있습니다. 애플이 GHUnit의 구현과 비슷한 XCTest에 솔루션을 제공했다고 생각할 것이다.
다음은 이전 메소드를 사용하여 Xcode 5에서 Objective-C 버전의 베어 본 예제 비동기 유닛 테스트가 어떻게 생겼는지 보여줍니다.
사실 많은 테스트에서 동일한 패턴을 다시 사용했기 때문에 각 헤더 파일에 포함되어야하는 매크로로 일부분을 변환했습니다. 또한 일부 조건에서는 테스트가 제대로 완료되지 않았다는 것에 유의했습니다.
글쎄요, 좋은 소식은, 1 년이 채 안되어 애플은 지능형 및 비정상적으로 지원되는 방식으로 비동기 단위 테스트를 구현할 수있는 수단을 제공했다는 것입니다. 또한 새로운 단위 테스트 프레임 워크로 Xcode 6의 새 버전 (아직 작성 당시 베타)을 제공했을뿐만 아니라 새로운 프로그래밍 언어 인 Swift를 제공했습니다. 지난 몇 주간 Objective-C 코드의 상당 부분을 Swift로 변환하는 데 약간의 시간을 할애했으며, Unit Tests를 XCTest 프레임 워크로 변환하면서 Apple의 비동기 유닛 테스트를위한 새로운 방법을 구현했습니다. 이제부터는 모든 iOS 코딩이 Swift에서 수행 될 예정이므로 아래 예제는 Swift에도 포함될 것입니다.
그럼, 어떻게 작동합니까? Xcode 6에서 Apple은 XCTestCase 클래스에 몇 가지 확장을 추가했으며 두 가지 중점을 다룰 것입니다.
또한 새로운 클래스 인 XCTestExpectation에도 한 가지 방법이 있습니다.
기본적으로 기대 & # 8221; 유닛 테스트에서 코드에 기대를 기다리는 대기 루프를 반복하십시오. 이전과 같은 패턴이지만 더 많은 옵션이 있습니다. 새로운 프레임 워크를 사용하여 이전 Objective-C 코드를 Swift로 변환 한 코드는 다음과 같습니다.
6 행에서 readyExpectation이라는 XCTestExpectation의 새 인스턴스를 인스턴스화합니다. 편의를 위해 간단한 설명을 제공하고 준비가되었습니다. 오류를 진단하는 데 도움이되도록이 로그가 테스트 로그에 표시됩니다. 하나 이상의 조건을 하나의 조건으로 설정할 수도 있습니다. 그런 다음 9 행에서 테스트해야 할 코드를 호출합니다. 완료 처리기에서 테스트를 수행 한 후 기대에 따라 메소드 fulfill ()을 호출합니다. 이것은 이전 Objective-C 구현에서 플래그를 false로 설정하는 것과 같습니다.
라인 18에서 시작하는 마지막 블록의 블록은 모든 기대가 충족되거나 시간 제한에 도달 할 때까지 이벤트를 처리하는 동안 실행 루프를 실행합니다. 안전한쪽으로 가기 위해 타임 아웃을 5 초로 설정했습니다.
그리고 그것에 관해서 & # 8217; 키 - 값 관측 및 성능 메트릭과 같은 단위 테스트 프레임 워크에 새로 추가 된 기능으로 더 많은 것을 할 수 있지만 위의 내용은 충분해야합니다. 마지막으로 우리는 Xcode에서 비동기 유닛 테스팅을위한 적절한 프레임 워크를 가지고 있습니다!
4 가지 생각 & ldquo; Xcode 6의 비동기 유닛 테스트 & rdquo;
이 업데이트 기사를 게시하신 것을 축하합니다. 이전 기사는 매우 좋았지 만, xctest =에 대해이 기사를 게시 해 주셔서 다행입니다.)
고맙습니다. 이 기사는 내 하루를 저장했습니다. 좋은 일을 계속 지켜라.
wait 시간 초과로 기대 : 핸들러 :
모든 기대치가 충족되거나 시간이 초과 될 때까지 대기합니다.
선언.
매개 변수.
모든 기대치가 충족되어야하는 시간.
모든 기대치가 충족되거나 대기 시간 제한이 트리거 될 때 호출 할 선택적 XCWait Completion Handler 블록. (Timeout은 항상 테스트 실패로 처리됩니다.)
토론.
이 방법은 테스트 흐름에서 동기화 지점을 만듭니다. 타임 아웃을 가진 기대에 대한 오직 하나의 대기 : 핸들러는 임의의 주어진 시간에 활성화 될 수 있지만, "예상을 생성하고 충족 될 때까지 기다린다"는 다수의 이산 시퀀스 함께 묶을 수 있습니다.
이 메서드는 XCTest Case의 편리한 메서드로 만 생성 된 기대를 기다립니다. 이 메서드는 XCTest Expectation 또는 해당 하위 클래스의 이니셜 라이저를 통해 수동으로 만든 기대를 기다리지 않습니다.
수동으로 생성 된 기대를 기다리려면 expect for wait : timeout : 또는 Waiting for Expectations : timeout : enforce Order : 메서드 또는 XCTWaiter의 해당 메서드를 사용하여 명시적인 예상 목록을 전달합니다.
클라이언트는이 API를 사용하는 동안 실행 루프를 조작해서는 안됩니다.
기대를 기다리는 중.
지정된 시간까지 예상 그룹을 대기합니다.
일련의 기대를 기다리고 주어진 순서대로 수행되어야 하는지를 지정합니다.
Wafer For Expectations With Timeout : handler :를 호출 할 때 호출 될 블록은 모든 기대치를 충족 시키거나 시간 초과됩니다.
기대가 충족되기를 기다리는 동안 발생할 수있는 오류에 대한 오류 코드.
기대치가 충족되기를 기다리는 동안 발생할 수있는 오류에 대한 도메인 오류입니다.
Xcode로 테스트하기.
테스트 클래스 및 메소드 작성.
테스트 탐색기가있는 프로젝트에 테스트 대상을 추가하면 Xcode에서 해당 대상의 테스트 클래스와 메서드를 테스트 탐색기에 표시합니다. 테스트 대상에는 테스트 메소드가 포함 된 테스트 클래스가 있습니다. 이 장에서는 테스트 클래스를 작성하고 테스트 메소드를 작성하는 방법에 대해 설명합니다.
테스트 타겟, 테스트 번들 및 테스트 네비게이터.
테스트 클래스를 작성하기 전에 테스트 탐색기를 다시 한 번 살펴볼 필요가 있습니다. 테스트를 만들고 작업하는 것은 테스트를 사용하는 것이 중요합니다.
프로젝트에 테스트 타겟을 추가하면 테스트 번들이 생성됩니다. 테스트 탐색기는 프로젝트의 모든 테스트 번들의 소스 코드 구성 요소를 레이아웃하여 테스트 클래스와 테스트 메소드를 계층 적 목록에 표시합니다. Here†™는 시험 묶음, 시험 종류 및 시험 방법의 중첩 된 계층 구조를 보여주는 2 개의 시험 표적이있는 프로젝트를위한 시험 항해자 전망이다.
테스트 번들은 여러 테스트 클래스를 포함 할 수 있습니다. 테스트 클래스를 사용하여 기능적 또는 조직적 목적으로 테스트를 관련 그룹에 분리 할 수 있습니다. 예를 들어 계산기 예제 프로젝트의 경우 Mac_Calc_Tests 테스트 번들의 일부인 BasicFunctionsTests, AdvancedFunctionsTests 및 DisplayTests 클래스를 만들 수 있습니다.
일부 유형의 테스트는 특정 유형의 설정 및 해체 요구 사항을 공유 할 수 있으므로 이러한 테스트를 클래스로 수집하여 일련의 설정 및 해체 방법을 통해 각 테스트 메소드에 대해 작성해야하는 코드의 양을 최소화 할 수 있습니다.
테스트 클래스 만들기.
주 :이 장에서는 설명을 위해 단위 테스트 클래스와 메소드에 중점을 둡니다. UI 테스트 대상, 클래스 및 메서드를 만드는 방법과 단위 테스트를 사용하는 방법과 다른 점은 사용자 인터페이스 테스트에서 다룹니다.
테스트 탐색기에서 추가 단추 (+)를 사용하여 새 테스트 클래스를 만듭니다.
단위 테스트 클래스 또는 UI 테스트 클래스를 추가하도록 선택할 수 있습니다. 이 중 하나를 선택하면 선택한 파일 템플리트 유형이 선택된 파일 유형 선택기가 표시됩니다. 새 Unit Test Class” 템플릿은 아래 그림에서 강조 표시되어 있습니다. 다음을 클릭하여 선택을 계속하십시오.
추가 한 각 테스트 클래스는 구성 시트에 입력 한 테스트 클래스 이름에 따라 프로젝트에 추가되는 TestClassName. m이라는 파일을 생성합니다.
참고 : 모든 테스트 클래스는 XCTest 프레임 워크에서 제공하는 XCTestCase의 하위 클래스입니다.
기본적으로 Xcode는 테스트 클래스 구현 파일을 프로젝트 в ™ ™ 테스트 타겟 용으로 만든 그룹으로 구성하지만 프로젝트를 선택할 때 파일을 구성 할 수 있습니다. 다음 X 버튼을 누를 때 표준 Xcode 파일 추가 시트가이 구성을 따릅니다.
프로젝트 탐색기에서 새 파일을 프로젝트에 추가 할 때와 같은 방법으로 파일 추가 시트를 사용합니다. 파일 추가 시트 사용 방법에 대한 자세한 내용은 기존 파일 또는 폴더 추가하기를 참조하십시오.
참고 : 새 프로젝트를 만들면 기본적으로 프로젝트 이름에서 파생 된 이름을 사용하여 테스트 대상 및 관련 테스트 번들이 생성됩니다. 예를 들어 MyApp라는 새 프로젝트를 만들면 MyAppTests라는 테스트 번들과 MyAppTests라는 테스트 클래스가 MyAppTests. m 구현 파일과 함께 자동으로 생성됩니다.
테스트 클래스 구조.
테스트 클래스에는 다음과 같은 기본 구조가 있습니다.
테스트 클래스는이 예에서 Objective-C로 구현되지만 Swift에서도 구현 될 수 있습니다.
참고 :이 텍스트의 구현 예제는 모두 일관성을 위해 Objective-C로 작성되었습니다.
Swift는 테스트 메소드를 구현하는 XCTest 및 Â를 완벽하게 지원합니다. 모든 Swift 및 Objective-C 언어 간 구현 기능을 사용할 수도 있습니다.
구현에는 인스턴스 설정과 해체를위한 메소드가 기본 구현과 함께 포함되어 있습니다. 이러한 방법은 필요하지 않습니다. 클래스의 모든 테스트 메소드가 동일한 코드를 필요로하는 경우 setUp 및 tearDown을 사용자 정의하여 포함 할 수 있습니다. 추가 한 코드는 각 테스트 메소드가 실행되기 전후에 실행됩니다. 선택적으로 클래스 셋업 (+ (void) setUp) 및 teardown (+ (void) tearDown)에 대한 사용자 정의 된 메소드를 추가 할 수 있습니다. 이 메소드는 클래스의 모든 테스트 메소드 전후에 실행됩니다.
테스트 실행의 흐름.
기본적으로 테스트를 실행할 때 XCTest는 모든 테스트 클래스를 찾고 각 클래스에 대해 모든 테스트 메서드를 실행합니다. (모든 테스트 클래스는 XCTestCase에서 상속됩니다.)
참고 : XCTest가 실행하는 테스트를 구체적으로 변경할 수있는 옵션이 있습니다. 테스트 탐색기를 사용하거나 구성표를 편집하여 테스트를 비활성화 할 수 있습니다. 테스트 네비게이터 또는 소스 편집기 거터에서 실행 버튼을 사용하여 그룹 내에서 하나의 테스트 또는 하위 테스트 만 실행할 수도 있습니다.
각 클래스에 대해 클래스 설정 방법을 실행하여 테스트를 시작합니다. 각 테스트 메소드에 대해 클래스의 새 인스턴스가 할당되고 해당 인스턴스 설정 메소드가 실행됩니다. 그런 다음 테스트 메소드를 실행 한 다음 인스턴스 티 아웃 메소드를 실행합니다. 이 순서는 클래스의 모든 테스트 메소드에 대해 반복됩니다. 클래스의 마지막 테스트 메서드 티 아웃이 실행 된 후 Xcode는 클래스 teardown 메서드를 실행하고 다음 클래스로 이동합니다. 이 순서는 모든 테스트 클래스의 모든 테스트 메소드가 실행될 때까지 반복됩니다.
시험 방법 작성.
테스트 메소드를 작성하여 테스트 클래스에 테스트를 추가합니다. 테스트 메소드는 접두어 테스트로 시작하고 매개 변수를 취하지 않고 void (예 : (void) testColorIsRed ()를 반환하는 테스트 클래스의 인스턴스 메서드입니다. 테스트 메소드는 프로젝트에 코드를 실행하고 해당 코드가 예상 결과를 생성하지 않으면 일련의 어설 션 API를 사용하여 실패를보고합니다. 예를 들어, function†™ s 반환 값은 예상 값과 비교 될 수 있습니다. 그렇지 않으면 테스트가 클래스 중 하나에서 부적절한 사용으로 인해 예외가 발생한다고 주장 할 수 있습니다. XCTest 어설 션은 이러한 어설 션을 설명합니다.
테스트 할 코드를 테스트 메소드에 액세스하려면 해당 헤더 파일을 테스트 클래스로 가져 오십시오.
Xcode가 테스트를 실행하면 각 테스트 메소드를 독립적으로 호출합니다. 따라서 각 메소드는 주제 API와 상호 작용하는 데 필요한 보조 변수, 구조 및 오브젝트를 준비하고 정리해야합니다. 이 코드가 클래스의 모든 테스트 메소드에 공통적 인 경우 테스트 클래스 구조에 설명 된 필수 setUp 및 tearDown 인스턴스 메소드에 추가 할 수 있습니다.
단위 테스트 방법의 모델은 다음과 같습니다.
다음은 빠른 시작 장에 표시된 응용 프로그램 인 SampleCalc에 대해 CalcView 인스턴스가 성공적으로 만들어 졌는지 확인하는 간단한 테스트 메서드 예제입니다.
비동기 작업 테스트 작성
각 테스트가 하나씩 차례로 호출되기 때문에 테스트가 동 기적으로 실행됩니다. 그러나 점점 더 많은 코드가 비동기 적으로 실행됩니다. 비동기식 메서드 및 함수를 호출하는 테스트 구성 요소를 처리하기 위해 Xcode 6에서 비동기 콜백 또는 시간 초과 완료를 기다리면서 테스트 메서드에서 비동기 실행을 serialize하는 기능이 포함되도록 XCTest가 향상되었습니다.
원본 예제 :
비동기 작업을위한 메서드 작성 방법에 대한 자세한 내용은 XCTestExpectation 참조 설명서를 참조하십시오.
성능 테스트 작성.
성능 테스트에서는 평가할 코드 블록을 10 번 실행하여 실행의 평균 실행 시간과 표준 편차를 수집합니다. 이러한 개별 측정 값의 평균은 테스트 실행에 대한 값을 형성합니다. 이 값을 기준선과 비교하여 성공 또는 실패를 평가할 수 있습니다.
참고 : 기준선은 테스트 통과 또는 실패의 평가에 사용하도록 지정한 값입니다. 보고서 UI는 기준 값을 설정하거나 변경하는 메커니즘을 제공합니다.
성능 측정 테스트를 구현하려면 Xcode 6 이상에서 XCTest의 새 API를 사용하여 메소드를 작성합니다.
다음 간단한 예제는 계산기 샘플 앱으로 추가 속도를 테스트하기 위해 작성된 성능 테스트를 보여줍니다. measureBlock : XCTest에 대한 반복 작업과 함께 추가됩니다.
일단 실행 된 성능 테스트는 구현 파일, 테스트 탐색기 및 보고서 탐색기에서 소스 편집기에서 정보를 제공합니다. 정보를 클릭하면 개별 실행 값이 표시됩니다. 결과 디스플레이에는 결과를 미래의 테스트 실행을위한 기준으로 설정하는 컨트롤이 포함됩니다. 베이스 라인은 장치 별 구성으로 저장되므로 여러 장치에서 동일한 테스트를 실행하고 특정 구성 †™ 프로세서 속도, 메모리 등에 따라 서로 다른 기준을 유지하게 할 수 있습니다.
참고 : 성능 측정 테스트는 첫 번째 실행에서 실패를보고하고 특정 장치 구성에 기준 값이 설정 될 때까지보고합니다.
성능 측정 테스트를위한 메서드 작성 방법에 대한 자세한 내용은 XCTestCase 참조 설명서를 참조하십시오.
UI 테스트 작성.
XCTest로 UI 테스트를 작성하는 것은 단위 테스트를 작성하는 것과 동일한 프로그래밍 모델을 확장 한 것입니다. 유사한 작업과 프로그래밍 방법론이 전반적으로 사용됩니다. 워크 플로 및 구현의 차이점은 UI 기록 및 XCTest UI 테스트 API 사용에 초점을두고 있습니다 (UI 테스트에서 설명 함).
신속한 시험 작성.
Swift 프로그래밍 언어 (Swift 4.0.3)의 Access Control 섹션에 설명 된 Swift 액세스 제어 모델은 외부 엔티티가 앱이나 프레임 워크에서 내부로 선언 된 것을 액세스하지 못하게합니다. 기본적으로 테스트 코드에서 이러한 항목에 액세스하려면 Swift†™ 유형 안전의 이점을 줄이기 위해 액세스 수준을 최소한 공개로 올릴 필요가 있습니다.
Xcode는이 문제에 대한 두 부분으로 된 해결책을 제공합니다.
Testability 빌드 사용 설정을 Yes로 설정하면 새 프로젝트의 테스트 빌드에 기본적으로 적용됩니다. Xcode에는 컴파일 중에 - enable-testing 플래그가 포함됩니다. 이렇게하면 컴파일 된 모듈에서 선언 된 Swift 엔티티가 더 높은 수준의 액세스 권한을 얻을 수 있습니다.
테스트가 활성화 된 컴파일 된 모듈에 대한 import 문에 testable 특성을 추가하면 해당 범위에서 해당 모듈에 대한 상승 된 액세스가 활성화됩니다. 내부 또는 공용으로 표시된 클래스 및 클래스 멤버는 열린 것으로 표시된 것처럼 동작합니다. 내부로 표시된 다른 항목은 공개로 선언 된 것처럼 작동합니다.
어떤 방식 으로든 소스 코드를 변경하지 마십시오. 컴파일 만 (플래그를 던짐으로써) 수정하고 테스트 코드는 (import 문을 수정하여) 수정합니다. 예를 들어 “MySwiftApp. †named라는 앱의 AppDelegate 구현과 같은 Swift 모듈을 생각해보십시오.
AppDelegate 클래스에 액세스 할 수있는 테스트 클래스를 작성하려면 다음과 같이 testable 특성을 사용하여 테스트 코드의 import 문을 수정합니다.
이 솔루션을 사용하면 신속한 애플리케이션 code†™의 내부 기능을 테스트 클래스 및 메소드에 완벽하게 액세스 할 수 있습니다. 테스트 가능한 수입에 대해 부여 된 액세스 권한은 다른 비 테스팅 고객이 테스트 용으로 컴파일 할 때도 Swift†™의 액세스 제어 규칙을 위반하지 않도록합니다. 또한 릴리스 빌드가 테스트 가능성을 보장하지 않기 때문에 모듈의 일반 사용자 (예 : 프레임 워크를 배포하는 경우) can†™ t 내부 엔티티에 대한 액세스 권한을이 방법으로 얻을 수 있습니다.
참고 : testable은 내부 함수에만 액세스를 제공합니다. 파일 private과 private 선언은 testable을 사용할 때 일반적인 범위 밖에서는 볼 수 없습니다.
XCTest 어설 션.
테스트 메소드는 XCTest 프레임 워크에서 제공하는 어설 션을 사용하여 Xcode가 표시하는 테스트 결과를 제공합니다. 모든 어설 션은 유사한 형식을 갖습니다 : 비교할 항목 또는 논리적 표현식, 실패 결과 문자열 형식 및 문자열 형식으로 삽입 할 매개 변수.
참고 : 모든 어설 션의 마지막 매개 변수는 형식입니다. , 형식 문자열 및 가변 매개 변수 목록. XCTest는 어설 션에 전달 된 매개 변수를 사용하여 어셈블 된 모든 어설 션에 대한 기본 실패 결과 문자열을 제공합니다. 형식. 자열은 제공된 설명에 추가로 제공 할 수있는 장애에 대한 추가 사용자 정의 설명을 제공하는 기능을 제공합니다. 이 매개 변수는 선택적이며 생략 될 수 있습니다.
예를 들어, 빠른 시작에 나와있는 testAddition 메소드에서이 어설 션을 살펴보십시오.
XCTAssertEqualObjects ([calcViewController. displayField stringValue], "8", "Part 1 failed.");
이것을 평이한 언어로 읽는다면, 컨트롤러 в ™ ™의 디스플레이 필드의 값으로 생성 된 문자열이 참조 문자열 вЂ88†™.†same와 동일하지 않을 때 실패를 알립니다. 테스트 탐색기에 실패 표시기가있는 Xcode 신호 어설 션은 실패하고 Xcode는 이슈 네비게이터, 소스 편집기 및 다른 장소에 설명 문자열과 함께 실패를 표시합니다. 소스 편집기의 일반적인 결과는 다음과 같습니다.
테스트 메소드는 다중 어설 션을 포함 할 수 있습니다. Xcode는 포함 된 어설 션 중 하나라도 실패를보고하면 테스트 메소드 실패를 알립니다.
어설 션은 다섯 가지 범주로 나뉩니다.
무조건 부주의. 특정 코드 분기에 도달하여 실패를 나타낼 때이를 사용하십시오. 이 카테고리의 유일한 어설 션은 XCTFail입니다.
평등성 테스트. 이들을 사용하여 두 항목 간의 관계를 선언하십시오. 예를 들어, XCTAssertEqual은 두 개의 표현식이 동일한 값을 갖고 있다고 주장하지만 XCTAssertEqualWithAccuracy는 두 개의 표현식이 특정 정확도 내에서 동일한 값을 갖는다 고 주장합니다. 이 범주에는 XCTAssertNotEqual 및 XCTAssertGreaterThan과 같은 부등호 테스트도 포함됩니다.
부울 테스트. 부울 표현식이 특정 방식으로 평가되는지 예를 들어 설명하려면 XCTAssertTrue 또는 XCTAssertFalse를 사용하십시오.
Nil Tests. 이 항목을 사용하여 항목이 XCTAssertNil 또는 XCTAssertNotNil을 사용하여 무효임을 주장하십시오.
예외 테스트. 표현식을 평가할 때 예외가 발생하는지 여부를 나타 내기 위해 이들을 사용하십시오. XCTAssertThrows를 사용하여 예외가 발생하거나 XCTAssertThrowsSpecific과 같은 어설 션으로 특정 예외를 찾을 수 있습니다. 또한 XCTAssertNoThrow와 같은 함수를 사용하여 표현식을 평가할 때 예외가 발생하지 않는다는 반전을 주장 할 수 있습니다.
XCTest Framework Reference에는 사용 가능한 모든 어설 션 기능의 전체 목록이 들어 있습니다.
Objective-C와 Swift에서 어설 션 사용하기.
XCTest 어설 션을 사용할 때 Objective-C (및 기타 C 기반 언어) 코드를 작성할 때와 Swift 코드를 작성할 때 assertions†™ 호환성 및 동작의 근본적인 차이점을 알아야합니다. 이러한 차이점을 이해하면 테스트 작성 및 디버깅이 쉬워집니다.
평등성 테스트를 수행하는 XCTest 어설 션은 개체를 비교하는 개체와 개체가 아닌 개체를 비교하는 개체로 나뉩니다. 예를 들어, XCTAssertEqualObjects는 객체 유형으로 확인되는 두 표현식 간의 동등성을 테스트하는 반면 XCTAssertEqual은 스칼라 유형의 값으로 해석되는 두 표현식간에 동등성을 테스트합니다. 이 차이점은이 테스트가 설명에서 스칼라에 대한 것임을 포함하여 XCTest 어설 션 목록에 표시되어 있습니다. 이런 식으로 “scalar†with로 단정문을 표시하면 기본 구분을 알 수 있지만 어느 표현식 유형과 호환되는지에 대한 정확한 설명이 아닙니다.
Objective-C의 경우 스칼라 유형으로 표시된 어설 션은 동등 비교 연산자와 함께 사용할 수있는 유형 (==,! =, & lt = =, & lt; , & gt; = 및 & gt; . 표현식이이 연산자와 작동하는 C 유형, 구조체 또는 배열 비교로 해석되면 스칼라로 간주됩니다.
Swift의 경우 스칼라로 표시된 어설 션을 사용하여 Equatable 프로토콜 (모든 “equal” 및 “not equal” 어설 션의 경우) 및 Comparable 프로토콜 (“greater than” 및 “less than” 어설 션의 경우)을 준수하는 모든 표현식 유형을 비교할 수 있습니다. 또한 스칼라로 표시된 어설 션은 [T]와 [K : V]에 우선 적용됩니다. 여기서 T, K 및 V는 Equatable 또는 Comparable 프로토콜을 따릅니다. 예를 들어, 동등한 유형의 배열은 XCTAssertEqual (_ : _ : _ : file : line :)과 호환되며 키와 값이 모두 비교 가능한 유형의 사전은 XCTAssertLessThan (_ : _ : _ : file : line : ).
테스트에서 XCTest 어설 션을 사용하는 것은 Objective-C와 Swift가 데이터 유형 및 암시 적 변환을 처리 할 때 언어가 다른 점 때문에 다릅니다.
Objective-C의 경우 XCTest 구현에서 암시 적 변환을 사용하면 비교가 expressions†™ 데이터 유형과 독립적으로 작동 할 수 있으며 입력 데이터 유형을 확인하지 않습니다.
Swift는 형식 안전성이 엄격하기 때문에 암시 적 변환은 허용되지 않습니다. 비교할 두 매개 변수는 모두 같은 유형이어야합니다. 형식 불일치는 컴파일 타임 및 소스 편집기에서 플래그가 지정됩니다.
저작권 & # x00a9; 2017 년 Apple Inc. 판권 소유. 이용 약관 | 개인 정보 보호 정책 | 업데이트 : 2017-01-24.
의견 보내기 & hellip;
죄송합니다. 오류가 발생했습니다.
나중에 의견을 보내주십시오.
의견을 제공해 주셔서 감사합니다!
귀하의 의견은 개발자 문서를 개선하는 데 도움이됩니다.
No comments:
Post a Comment