[swift] Quick/Nimble으로 앱의 네트워크 통신 테스트하기

소개

앱 개발을 할 때 네트워크 통신은 중요한 부분입니다. 통신이 원활히 이루어지지 않으면 앱의 성능과 사용자 경험에 악영향을 미칠 수 있습니다. 이를 해결하기 위해 테스트 코드를 작성하여 네트워크 통신을 검증할 필요가 있습니다. 이번 글에서는 Swift 프로젝트에서 Quick/Nimble 라이브러리를 사용하여 앱의 네트워크 통신을 테스트하는 방법에 대해 알아보겠습니다.

Quick/Nimble이란?

Quick은 BDD(Behavior Driven Development) 스타일의 테스트 프레임워크로, 앱 개발 과정에서 테스트 코드 작성과 유지보수를 쉽게 할 수 있도록 도와줍니다. Nimble은 Quick과 함께 사용되는 어서션(assertion) 라이브러리로, 테스트 결과를 더 가독성 있게 표시해줍니다.

설치

Quick/Nimble을 프로젝트에 추가하기 위해서는 먼저 Swift 패키지 매니저를 사용하여 의존성을 관리해야 합니다. Package.swift 파일에 Quick과 Nimble을 추가해주세요.

dependencies: [
    .package(url: "https://github.com/Quick/Quick.git", from: "2.2.0"),
    .package(url: "https://github.com/Quick/Nimble.git", from: "8.0.1")
],
targets: [
    .testTarget(
        name: "MyAppTests",
        dependencies: ["Quick", "Nimble"]
    )
]

이후 터미널에서 프로젝트 디렉토리로 이동하여 swift package resolve 명령어를 실행하여 의존성을 불러옵니다. 이제 Quick/Nimble을 사용할 준비가 끝났습니다.

네트워크 통신 테스트 작성하기

네트워크 통신을 테스트하기 위해서는 Mock 서버나 Fake 데이터를 사용하여 실제 통신을 모방해야 합니다. 예를 들어, 앱에서 사용자의 이름을 받아와서 환영 메세지를 생성하는 기능을 테스트해보겠습니다.

import Quick
import Nimble
@testable import MyApp

class APITests: QuickSpec {
    override func spec() {
        describe("API 요청") {
            it("사용자의 이름으로 환영 메세지를 생성한다") {
                let api = MyAPI()
                let expectedName = "John"
                
                waitUntil(timeout: 5) { done in
                    api.requestWelcomeMessage(name: expectedName) { result in
                        switch result {
                        case .success(let welcomeMessage):
                            expect(welcomeMessage).to(equal("Welcome, John!"))
                        case .failure(let error):
                            fail("API 요청 실패: \(error.localizedDescription)")
                        }
                        
                        done()
                    }
                }
            }
        }
    }
}

위의 코드에서는 MyAPI 클래스의 requestWelcomeMessage 메서드를 호출하여 사용자의 이름에 따라 환영 메세지를 생성하며, 이를 검증합니다. waitUntil 블록에서 API 응답을 비동기적으로 대기하고, 결과에 따라 테스트를 진행합니다.

실행

테스트를 실행하기 위해서는 Xcode의 테스트 타겟을 선택하고, Cmd + U를 눌러 실행합니다. Quick/Nimble은 테스트 결과를 상세하게 표시하여 실패한 테스트를 쉽게 찾을 수 있도록 도와줍니다.

결론

Quick/Nimble을 사용하여 Swift 앱의 네트워크 통신을 테스트하는 방법에 대해 알아보았습니다. 이를 통해 앱의 품질을 향상시키고, 버그를 미리 예방할 수 있습니다. 추가적으로 앱의 다른 기능에 대한 테스트 코드를 작성하는 것도 추천합니다.

참고 자료