반응형
iOS 15.5, Xcode 13.31, Swift 5, UIKit 환경에서 진행했습니다.
import Foundation
class ToDoItemStore {
let itemPublisher = CurrentValueSubect<[ToDoItem], Never>([])
var items: [ToDoItem] = [] {
didSet {
itemPublisher.send(items)
}
}
// 외부에서 Item을 추가할 시 사용하는 메소드
func add(_ item: ToDoItem) {
items.append(item)
}
}
import XCTest
import Combine
class ToDoStoreTests: XCTestCase {
func test_add_shouldPublisherChange() {
let sut = ToDoItemStore() // system under test
let expectation = expectation("Wait for \(#file)")
var receivedItem: [ToDoItem] = []
// subscribe 등록
let token = sut.itemPublisher
.dropFirst()
.sink { items in
receivedItem = items
expectation.fulfill()
}
let dummy = ToDoItem(title: "dummy test")
// 데이터 입력
sut.add(dummy)
// 1초간 대기
wait([expectation], timeout: 1)
token.cancel()
// 테스트 확인
XCTAssertEqual(receivedItem.first?.title, dummy.title)
}
}
참고자료 : Test-Driven iOS Development with Swift
반응형
'iOS > 코드조각' 카테고리의 다른 글
[iOS, Swift] 데이트 포맷 변경하기 (iso8601 to customDate) (0) | 2022.08.15 |
---|---|
[iOS, Swift] urlSession network 통신 (0) | 2022.08.15 |
[iOS, Swift] 테이블뷰 안의 테이블셀 버튼 클릭하기 (delegate) (0) | 2022.08.10 |
[iOS, Swift] 테이블 뷰의 셀 지우기 (0) | 2022.08.10 |
[iOS, Swift] Asset validation failed(TestFlight, Archive) (0) | 2022.07.19 |