목차

티스토리 뷰

728x90
반응형

 

안녕하세요 🐾

지난글에 이어 XCTest 프레임워크 관련 라이브러리인 QuickNimble에 대하여 알아보도록 하겠습니다.

복기를 위하여 작성한 글이니 틀린 부분이 있다면 알려주세요!

 

※ XCTest 기초 및 BDD, TDD등의 개발 프로세스에 대한 설명은 아래의 글을 참고해주세요.

2024.03.20 - [iOS/Xcode] - [iOS/Xcode] XCTest 기초 정리(TDD, BDD)

 


 

설치

# Podfile

use_frameworks!

target "MyApp" do
  # Normal libraries

  target 'MyApp_Tests' do
    inherit! :search_paths

    pod 'Quick'
    pod 'Nimble'
  end
end

 

프로젝트 디렉토리 내 podfile 수정 → pod install

 

1. What is Quick?

💡 Quick

BDD 개발 프로세스 기반의 테스트를 지원하는 프레임워크 입니다.
XCTest 프레임워크에서 사용하는 API를 BDD 스타일에 맞게 구조화된 방식의 코드를 작성합니다.

예) XCTest만을 사용하는 경우 기본 구조
import XCTest

final class AssumXCTestTests: XCTestCase {

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

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

    func testExample() throws {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
        // Any test you write for XCTest can be annotated as throws and async.
        // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
        // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
    }

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

}

 


예) Quick을 사용하는 경우 기본 구조
import XCTest
import Quick

class AssumXCTestTests: QuickSpec {
    override class func spec() {
        // Input your test code.
    }
}


QuickSpec을 상속하면 XCTestCase 의 기본 구조를 spec()이라는 이름을 가진 오버라이드 메소드를 호출하면 한번에 처리할 수 있습니다.

그 이유는 아래와 같이 QuickSpec이 XCTestCase의 서브클래스이기 때문입니다.



앞서 말씀드렸던것 처럼, QuickBDD 기반의 테스트 케이스 작성에 도움을 주는 프레임워크입니다.
spec 메소드 안에 아래의 코드로 BDDGiven - When - Then 형식을 나타낼 수 있습니다.

import Quick
import Nimble

class AssumXCTestTests: QuickSpec {
    override class func spec() {
        // Given : 주어진 환경
        describe("계산기 화면에 진입했다") {
            // When : 행위
            context("사용자가 두 숫자의 값을 더했다.") {
                // Then : 행위에 기반한 기대 결과
                it("두 숫자의 올바른 합을 반환한다.") {
                    // input your test assertion code
                }
            }
        }
    }
}


이때 Given =  describe / When = context / Then = it 으로 대체하여 입력합니다.

 

위와 같이 Quick을 이용하여 테스트 케이스를 가독성 있게 BDD 기반으로 만들어놓았습니다.

만들어놓은 테스트 케이스의 검증XCTest의 Test Assertion 코드로 만들어야 하는데, 이때 도움이 되는 프레임워크가 Nimble입니다.

2. What is Nimble?

💡 Nimble

Nimble XCTest 프레임워크Test Assertion에 해당 하는 코드들을 간결하고 가독성 있게 제공하는 프레임워크입니다.

예를 들어 1 + 1 = 2에 대한 검증을 Test Assertion으로 표현하면 아래와 같습니다.
XCTAssertEqual(1 + 1, 2, "1 더하기 1은 2입니다.")​

 

XCTest Assertion에는 아래와 같은 단점이 있습니다.

1. 문자열에 특정 문자열이 포함되어있거나, 숫자가 다른 숫자보다 작거나 같은지 비교하는 등의 직관적인 매크로가 충분하지 않습니다.
2. XCTest를 이용해 비동기 코드를 작성하려면 많은 보일러플레이트 코드를 작성해 합니다. 여기서 보일러플레이트 코드란 묻지도 따지지도 않고 적어야 하는 코드를 뜻합니다.

Nimble은 위와 같은 단점을 보완하여 expect(...).to형식을 갖고 있는 메소드를 통해 다양한 케이스의 Test Assertion을 나타냅니다.


다시 예를 들어 1 + 1 = 2에 대한 검증Nimble로 나타내면 아래와 같습니다.
expect(1 + 1).to(equal(2))


이 외에도 expect메소드와 관련된 다양한 표현식은 링크를 참고 해주세요.

 

 

3. 사용 예제

import Quick
import Nimble

class AssumXCTestTests: QuickSpec {

    override class func spec() {
        // Given :  주어진 환경
        describe("계산기 화면에 진입 or 계산기 모듈") {
            // When : 행위
            context("사용자가 두 숫자의 값을 더했다.") {
                // Then : 행위에 기반한 기대 결과
                it("두 숫자의 올바른 합을 반환한다.") {
                    expect(1 + 1).to(equal(2), description: "두 숫자의 합이 올바르지 않습니다.")
                }
                
                it("두 숫자의 합이 5보다 작아야 한다.") {
                    expect(1 + 6).to(beLessThan(5), description: "두 숫자의 합이 5보다 큽니다.")
                }
            }
        }
    }
    
}

 

테스트 실행 후 에러가 발생되는 부분 확인

 

4. 참고

- https://github.com/Quick/Quick

- https://github.com/Quick/Nimble

반응형
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함