whangAl.webp

Record 는 사전에 정의된 값을 순차적으로 발행하고, 정의된 완료 이벤트를 발행하는 Publisher입니다.

미리 정해진 값을 그대로 발행한다는 점에서 테스트 목적으로 주로 사용돼요.

특징

  1. 미리 정의된 값을 순차적으로 발행해요. 즉, 어떻게 구독될 값은 생성시점에 이미 결정돼요.
  2. 외부 데이터 소스 없이 Mock Data만 사용하므로 단위테스트용으로 사용하기 적합해요.
  3. Record는 구독하는 모든 Subscriber은 동일한 데이터 시퀀스와 완료이벤트를 받아요. 테스트시 일관된 조건을 유지하려고 할때 유용해요.

사용

let recordPublisher = Record<Int, Never>(output: [1,2,3], completion: .finished)

recordPublisher
  .sink(receiveCompletion: { completion in
    switch completion {
    case .finished:
      print("finished")
    case .failure(let failure):
      print(failure)
    }
  }, receiveValue: { value in
    print(value)
  })
  .store(in: &cancellables)

-- 결과
1
2
3
finished
enum CustomError: Error  {
  case unknownError
}

let recordPublisher = Record<Int, CustomError>(output: [1,2,3], completion: .failure(.unknownError))

recordPublisher
  .sink(receiveCompletion: { completion in
    switch completion {
    case .finished:
      print("finished")
    case .failure(let failure):
      print(failure)
    }
  }, receiveValue: { value in
    print(value)
  })
  .store(in: &cancellables)

-- 결과
1
2
3
unknownError