相关疑难解决方法(0)

Swift 如何测试封装在函数中的异步调用

当此调用包装在另一个方法中时,有没有办法等待异步调用完成?

class Owner{
   let dataManager = MockDataManager()
   var data: String? = nil

   func refresh() {
        Task {
            self.data = await dataManager.fetchData()
        }
    }
}

class MockDataManager {
    var testData: String = "test"
    func fetchData() async -> String {
       testData
    }
}

class OwnerTests: SKTestCase {
    private var owner = Owner()
    
    func testRefresh() {
        owner.refresh()
        XCTAssertEqual(owner.data, "test") // fail. the value is still nil
    }
}
Run Code Online (Sandbox Code Playgroud)

通过回调,如果引擎盖下的所有内容都被同步调用替换,则测试可以正常工作,但这里看起来我缺少一个等待更改的操作owner.data

unit-testing async-await swift

7
推荐指数
2
解决办法
3645
查看次数

标签 统计

async-await ×1

swift ×1

unit-testing ×1