You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Combine中配置Mock服务返回错误以测试错误处理流程

实现方案

给PostsServiceMock新增一个可选的错误存储属性,调用getPosts时优先判断该属性是否有值:如果存在就返回错误响应,否则返回预设的Mock帖子列表。同时要在reset方法中加入该属性的重置逻辑,避免跨测试用例的状态污染。

修改后的完整代码如下:

class PostsServiceMock: PostsServiceProtocol {
    var posts: [Post] = [.mock()]
    var getPostsCallCount = 0
    // 新增:自定义要返回的错误,为nil时返回正常数据
    var customError: APIError?

    func getPosts() -> AnyPublisher<[Post], APIError> {
        getPostsCallCount += 1
        // 优先判断是否要返回错误
        if let error = customError {
            return Fail(error: error)
                .eraseToAnyPublisher()
        } else {
            return Just(posts)
                .setFailureType(to: APIError.self)
                .eraseToAnyPublisher()
        }
    }

    func reset() {
        getPostsCallCount = 0
        // 重置时清空自定义错误,默认回到返回正常数据的状态
        customError = nil
    }
}
使用示例
  • 测试正常业务流程:不需要额外设置,默认返回预设的posts数组即可
  • 测试错误处理流程:执行测试前给customError赋值对应错误即可,示例:
// 测试网络异常场景
let mockService = PostsServiceMock()
mockService.customError = APIError.networkError
// 后续调用getPosts就会返回对应错误,验证错误处理逻辑是否符合预期

如果需要更灵活的控制,比如支持按调用次数返回不同结果(第一次成功、第二次失败),可以把customError改成数组类型,按getPostsCallCount取对应位置的错误即可,普通场景下上面的方案已经完全够用。

内容的提问来源于stack exchange,提问作者Wazza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:12:03