小编Bob*_*eld的帖子

Swift 5.5 在 init 中测试异步任务

我想测试我的 init 函数是否按预期工作。Task {} 块内的 init 中有一个异步调用。如何让我的测试等待任务块的结果?

class ViewModel: ObservableObject {
    @Published private(set) var result: [Item]
        
    init(fetching: RemoteFetching) {
        self.result = []
        Task {
            do {
                let result = try await fetching.fetch()
                
                self.result = result // <- need to do something with @MainActor?
            } catch {
                print(error)   
            }
        }
    }  
}
Run Code Online (Sandbox Code Playgroud)

测试:

func testFetching() async {
    let items = [Item(), Item()]
    let fakeFetching = FakeFetching(returnValue: items)

    let vm = ViewModel(fetching: FakeFetching())
        
    XCTAssertEqual(vm.result, [])
        
    // wait for fetching, but how?
        
    XCTAssertEqual(vm.result, …
Run Code Online (Sandbox Code Playgroud)

concurrency swift

6
推荐指数
1
解决办法
4304
查看次数

标签 统计

concurrency ×1

swift ×1