[swift] Quick/Nimble을 사용한 앱의 도어락 연동 테스트 작성 방법

앱 개발 중에는 외부 기기와의 연동을 테스트해야 할 때가 있습니다. 이번 블로그 포스트에서는 Swift 언어와 Quick/Nimble 테스트 프레임워크를 사용하여 도어락의 연동 테스트를 작성하는 방법을 알아보겠습니다.

1. Quick/Nimble 설치

먼저, Quick/Nimble을 설치해야 합니다. 이를 위해 CocoaPods 또는 Carthage를 사용하실 수 있습니다. 프로젝트의 Podfile에 다음과 같이 Quick/Nimble을 추가합니다:

target 'YourApp' do
  # 기존 패키지들...
  pod 'Quick'
  pod 'Nimble'
end

그리고 터미널에서 다음 명령어를 실행하여 Quick/Nimble을 설치합니다:

$ pod install

2. 도어락 연동 테스트 작성

이제 도어락의 연동 테스트를 작성해보겠습니다. 테스트 코드는 ‘Spec’ 파일에 작성하며, ‘Spec’ 파일은 일반적으로 ‘Specs’ 디렉토리에 저장됩니다. 예를 들어, ‘DoorLockSpec.swift’ 파일을 생성하여 테스트 코드를 작성합니다.

import Quick
import Nimble

@testable import YourApp // 테스트할 앱의 모듈을 불러옵니다.

class DoorLockSpec: QuickSpec {
  override func spec() {
    describe("DoorLock") { 
      var doorLock: DoorLock!
      
      beforeEach {
        // 도어락 초기화
        doorLock = DoorLock()
      }
      
      context("when unlocked with valid passcode") {
        it("should change lock state to unlocked") {
          // 유효한 패스코드로 도어락 해제
          doorLock.unlock(with: "1234")
          
          // 도어락 상태가 언락된 상태인지 확인
          expect(doorLock.currentState) == .unlocked
        }
      }
      
      context("when unlocked with invalid passcode") {
        it("should not change lock state") {
          // 유효하지 않은 패스코드로 도어락 해제
          doorLock.unlock(with: "0000")
          
          // 도어락 상태가 변경되지 않은 상태인지 확인
          expect(doorLock.currentState) == .locked
        }
      }
      
      context("when locked") {
        it("should remain locked after unlocking attempt") {
          // 도어락 잠금
          doorLock.lock()
          
          // 도어락 해제 시도
          doorLock.unlock(with: "1234")
          
          // 도어락 상태가 잠금된 상태인지 확인
          expect(doorLock.currentState) == .locked
        }
      }
    }
  }
}

위 코드에서는 테스트할 앱의 모듈을 @testable import YourApp을 통해 불러옵니다. 그리고 ‘DoorLockSpec’ 클래스를 작성하여 테스트 코드를 작성합니다. describe 블록을 사용하여 ‘DoorLock’에 대한 헤더를 작성하고, beforeEach 블록에서는 각 테스트 케이스 실행 전에 도어락을 초기화합니다.

context 블록 안에 각 테스트 케이스와 기대 결과를 작성합니다. 예를 들어, 유효한 패스코드로 도어락을 해제했을 때 도어락 상태가 언락된 상태인지 확인하는 테스트 케이스는 다음과 같습니다:

context("when unlocked with valid passcode") {
  it("should change lock state to unlocked") {
    doorLock.unlock(with: "1234")
    expect(doorLock.currentState) == .unlocked
  }
}

3. 테스트 실행

이제 테스트를 실행해보겠습니다. Xcode에서 ‘Cmd + U’를 눌러 테스트를 실행하거나, 터미널에서 다음 명령어를 실행합니다:

$ xcodebuild test -workspace YourApp.xcworkspace -scheme YourApp -destination 'platform=iOS Simulator,OS=14.5,name=iPhone 11'

위와 같이 명령어를 실행하면 시뮬레이터에서 앱을 빌드하고 테스트를 실행합니다.

마무리

이제 Quick/Nimble을 사용하여 앱의 도어락 연동 테스트를 작성하는 방법에 대해 알아보았습니다. 이를 통해 외부 기기와의 연동을 효과적으로 테스트할 수 있습니다. 추가로 필요한 기능이나 테스트 케이스들을 작성하여 앱의 안정성을 더욱 향상시킬 수 있습니다. 더 자세한 내용은 Quick 공식 문서를 참고해주세요.