iOS/코드조각

[iOS, Swift] CurrentValueSubject 사용하기, 테스트 코드 (Combine)

검은참깨두유vm 2022. 8. 14. 19:49
반응형

 

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

반응형