MST

星途 面试题库

面试题:Swift XCTest中如何处理异步操作的单元测试

在Swift项目里,有一个异步函数`func fetchData(completion: @escaping (Result<String, Error>) -> Void)`,它通过网络请求获取数据并在完成时调用completion闭包。请使用XCTest框架为这个异步函数编写单元测试,验证数据获取成功和失败的不同场景。
41.5万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试
import XCTest
@testable import YourModuleName // 替换为实际的模块名

class FetchDataTests: XCTestCase {

    func testFetchDataSuccess() {
        let expectation = XCTestExpectation(description: "等待数据获取成功")
        fetchData { result in
            switch result {
            case .success(let data):
                XCTAssertFalse(data.isEmpty, "数据获取成功,数据不应为空")
                expectation.fulfill()
            case .failure(let error):
                XCTFail("数据获取成功场景下不应出现错误: \(error)")
            }
        }
        wait(for: [expectation], timeout: 5)
    }

    func testFetchDataFailure() {
        let expectation = XCTestExpectation(description: "等待数据获取失败")
        // 这里模拟网络请求失败,例如修改网络请求逻辑使其返回错误
        fetchData { result in
            switch result {
            case .success:
                XCTFail("数据获取失败场景下不应成功")
            case .failure(let error):
                XCTAssertNotNil(error, "数据获取失败,错误不应为空")
                expectation.fulfill()
            }
        }
        wait(for: [expectation], timeout: 5)
    }
}