[swift] Swift SkeletonView 데이터 테스팅 방법

Swift SkeletonView는 사용자에게 로딩 상태를 시각적으로 표시하는 용도로 사용되는 라이브러리입니다. 이 라이브러리를 사용하여 앱의 사용자 경험을 향상시킬 수 있습니다. 하지만 SkeletonView를 사용하는 동안 데이터가 정상적으로 로드되고 표시되는지 테스트하는 것은 중요한 과정입니다. 이제 Swift에서 SkeletonView 데이터 테스팅을 어떻게 할 수 있는지 알아보겠습니다.

1. 데이터 로딩 메서드 Mocking

SkeletonView 데이터 테스팅을 위해서는 데이터를 로드하는 메서드를 목(Mock)으로 대체해야 합니다. 목(Mock)은 실제로 데이터를로드하지 않고 테스트 중인 메서드를 대신합니다.

class MockDataManager: DataManager {
  override func fetchData(completion: (Result<[Data], Error>) -> Void) {
    let dummyData = [Data]() // 테스트 데이터
    completion(.success(dummyData))
  }
}

위의 코드는 MockDataManager라는 클래스를 생성하고 fetchData(completion:) 메서드를 재정의하여 더미 데이터를 반환하는 형태입니다. 이렇게 하면 SkeletonView가 데이터 로딩 중임에도 불구하고 빈 화면을 보여주는 동작을 확인할 수 있습니다.

2. SkeletonView 표시 확인

SkeletonView가 제대로 표시되는지 테스트하기 위해 XCTest를 사용하여 확인하겠습니다. XCTest는 Swift에서 사용 가능한 테스트 프레임워크입니다.

func testSkeletonViewDisplay() {
  let mockDataManager = MockDataManager()
  let viewController = MyViewController(dataManager: mockDataManager)
  
  // SkeletonView가 화면에 표시될 때까지 대기합니다.
  DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
    XCTAssertTrue(viewController.skeletonView.isSkeletonActive, "SkeletonView가 화면에 표시되어야 합니다.")
    
    // SkeletonView가 사라지면 성공하도록 체크합니다.
    DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
      XCTAssertFalse(viewController.skeletonView.isSkeletonActive, "SkeletonView가 화면에서 사라져야 합니다.")
    }
  }
}

위의 코드에서는 테스트 케이스를 작성하고 MockDataManager를 사용하여 테스트할 뷰 컨트롤러를 초기화합니다. 그런 다음 SkeletonView가 화면에 표시될 때까지 기다리고(isSkeletonActive가 true인지 확인) 일정 시간 후에 SkeletonView가 사라지면(isSkeletonActive가 false인지 확인) 테스트를 성공합니다.

3. 테스트 실행 및 결과 확인

위의 테스트 케이스를 실행하여 SkeletonView 데이터 테스팅이 정상적으로 수행되는지 확인할 수 있습니다. XCTest를 사용하여 테스트를 실행하고 결과를 확인하는 과정이 필요합니다.

$ xcodebuild test -scheme "MyAppTests" -destination "platform=iOS Simulator,name=iPhone 12" -only-testing:MyAppTests.SkeletonViewTests

위의 명령을 실행하여 테스트를 실행하고 결과를 확인할 수 있습니다. 테스트가 성공하면 SkeletonView 데이터 테스팅이 잘 수행된 것입니다.

이제 SkeletonView 데이터 테스팅을 위한 기본적인 방법에 대해 알아보았습니다. 이를 통해 앱에서 SkeletonView를 사용하면서 데이터 로딩 상태를 테스트할 수 있습니다.