首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Swift中使用布谷鸟,为什么对`stub`的调用会抱怨来自GeneratedMocks的类不符合模拟协议?

在Swift中使用布谷鸟(Moya)时,对stub的调用可能会抱怨来自GeneratedMocks的类不符合模拟协议。这个问题通常是由于布谷鸟的模拟对象无法正确识别由Sourcery生成的模拟类所导致的。

布谷鸟是一个用于网络请求的优秀框架,它提供了简洁的API来处理网络请求和响应。在使用布谷鸟进行单元测试时,我们通常会使用模拟对象来模拟网络请求的结果,以便在不依赖真实网络的情况下进行测试。

然而,当我们在使用Sourcery自动生成模拟类时,布谷鸟的模拟对象可能无法正确地识别这些模拟类是否符合模拟协议。这可能是由于Sourcery生成的模拟类在某些方面与布谷鸟的期望不一致,导致了这个问题的出现。

为了解决这个问题,我们可以尝试以下几个步骤:

  1. 确保使用的布谷鸟版本与Sourcery生成的模拟类兼容。有时,不同版本的布谷鸟可能对模拟类的要求有所不同。尝试更新布谷鸟的版本,或者查看布谷鸟的文档以了解与Sourcery生成的模拟类兼容的版本。
  2. 检查Sourcery生成的模拟类是否正确实现了布谷鸟的模拟协议。确保模拟类正确地实现了布谷鸟所期望的属性和方法。可以查看布谷鸟的文档,了解模拟协议的具体要求,并确保模拟类满足这些要求。
  3. 尝试手动修改Sourcery生成的模拟类以符合布谷鸟的期望。如果布谷鸟的模拟对象仍然无法正确识别模拟类,可以尝试手动修改模拟类的代码,以使其符合布谷鸟的期望。这可能涉及到添加或修改属性、方法或协议的实现。

总之,在Swift中使用布谷鸟时,如果对stub的调用抱怨来自GeneratedMocks的类不符合模拟协议,我们需要确保布谷鸟的版本与Sourcery生成的模拟类兼容,并检查模拟类是否正确实现了布谷鸟的模拟协议。如果问题仍然存在,可以尝试手动修改模拟类以符合布谷鸟的期望。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS_单元测试三之OCMock使用

当init方法再次被调用时,直接返回模拟对象self 这样就可以有效alloc、init进行Stub 9.4、基于实现方法交换 Instance-based method swizzling...当开发人员尝试为此类创建模拟程序时,将引发异常,解释问题说 该方法单独调用中返回不同值是可以接受,这使它在运行时特定条件做出反应 如果该方法为reason赋值,返回值将被忽略 对于所有未实现此方法...(@"a string"); OCMExpect([mock someMethod]); 由于当前实现了模拟对象方法,Stub处理所有调用。...具体来说,以 NS 或 UI 作为前缀中,所有带有下划线前缀和/或后缀方法。 某些情况下,可以对方法进行存根,然后其进行验证。...但是,可以从多个线程使用模拟对象。模拟对象甚至可以不同线程中使用,而其设置主线程中继续进行。 11、补充 11.1、单例mock 不能直接mock单例,会引起mock冲突。

3.1K20

Swift 编写网络层单元测试

上次写封装一个 Swift-Style 网络模块时候结尾提了一下单元测试重要性,评论中有朋友网络层单元测试有一些疑惑。...我推荐他去看《单元测试艺术》(这本书让我单元测试有了新认识),但由于该书是以 C# 为例写,可能会对 iOS 开发朋友造成一定阅读障碍,所以我还是决定填一下坑,简单介绍一下 Swift 进行网络层单元测试方法...要测试状态改变一般需要先测试初始状态,然后调用改变状态方法,再测试改变后状态。而交互测试可能就需要用到 fake (伪对象),fake 分为 stub (存根)和 mock (模拟对象)两种。...由于 Swift 反射非常弱鸡,似乎并没有什么特别好用 mock 框架,所以一般来说可以面向协议思想来减少对象间耦合,然后手动构建一个 fake 用于测试,当然这需要一些依赖注入技术配合。...Swift 毕竟是一门 FP 支持度很高语言,所以工作单元还可能有第四种最终结果——调用第三方函数(这个说法好像怪怪,领会精神啊哈哈)。

2K20

Sendable 和 @Sendable 闭包代码实例详解

Sendable 协议 class Article { var views: Int } 不符合要求,因为它是一个引用类型,因此可以从其他并发域变异。...同样问题发生在我们想要使一个可变非最终遵守Sendable协议时: 可变非最终无法遵守 Sendable 协议 由于该类是非最终,我们无法符合Sendable协议要求,因为我们不确定其他是否继承...一个典型例子是Actor isolation中使用闭包。...这种模式检查其他两种模式所做一切,并你项目中所有代码进行这些检查。 严格并发检查构建设置有助于 Swift 向数据竞赛安全迈进。...Enabling strict concurrency in Xcode 14 你会得到警告数量取决于你项目中使用并发频率。

1.2K20

Swift Sendable 和 @Sendable 闭包

Sendable 协议 class Article { var views: Int } 不符合要求,因为它是一个引用类型,因此可以从其他并发域变异。...同样问题发生在我们想要使一个可变非最终遵守Sendable协议时: 可变非最终无法遵守 Sendable 协议 由于该类是非最终,我们无法符合Sendable协议要求,因为我们不确定其他是否继承...使用@Sendable属性,我们将告诉编译器,他不需要额外同步,因为闭包中所有捕获值都是线程安全。一个典型例子是Actor isolation中使用闭包。...这种模式检查其他两种模式所做一切,并你项目中所有代码进行这些检查。 严格并发检查构建设置有助于 Swift 向数据竞赛安全迈进。...Enabling strict concurrency in Xcode 14 你会得到警告数量取决于你项目中使用并发频率。

1.4K30

架构之路 (七) —— iOS AppSOLID原则(一)

Open-Closed 软件实体,包括、模块和函数,应该扩展开放,修改关闭。 这意味着您应该能够扩展您类型功能,而无需大幅更改它们以添加您需要内容。 3....使用@Published 需要一个; 它不能在协议中使用。...这不仅可以让您删除在此处编写代码,还可以让您轻松地为测试中视图提供模拟数据源。 构建并运行。 您会发现一切仍然完好无损,预览现在显示您模拟费用。... saveEntry()中,您刚刚添加新属性替换对 saveClosure 调用: saveEntryHandler.saveEntry( title: title, price: numericPrice...它现在可以自由使用任何类型存储,只需代码进行最少更改。 3) 添加新报告类型是枚举中添加新值问题。 4) 创建预览和测试比以前容易得多,而且您不再需要任何复杂模拟对象。

4.7K10

iOS16 和 Xcode14 如何改进 App 大小和运行时性能

当我们 Swift 或者 OC 进行编码时,实际上是跟两个主要部分打交道。...第一, Xcode 进行 build 时,其实是 Swift 和 Clang 编译器工作,而当你 run app 时,很多繁重工作是由 Swift 和 Objective-C 运行时完成。...这正是协议检查优化为什么让启动加快原因。而且Swift 项目中,协议无处不在,这种优化相对更明显。...每个都有一张方法列表来存储这个方法列表,当调用 objc_msgSend 时,就会通过参数去这个对应对应方法列表中查找,先在cache 中查找,然后方法列表中查找,如果当前找不到,就往上找父...因此,对于 ARC,编译器插入这些 C 函数调用,并传递适当对象指针。

3.8K30

软件测试新趋势 | TW洞见

已经本网协议授权媒体、网站,使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。 2015年11月,ThoughtWorks发布了新一期技术雷达。...Mountebank就是一个用于组件测试轻量级测试工具,可以被用于 HTTP、HTTPS、SMTP和TCP进行模拟(Mock)和打桩(Stub)。...Postman是一个Chrome中使REST客户端插件,通过Postman,你可以创建请求并且分析服务器端返回信息。这个工具开发新API或者实现对于已有API客户端访问代码时非常有用。...Hamms可以模拟一个行为损坏HTTP服务器,触发一系列失败,包括连接失败,或者响应缓慢,或者畸形响应,从而帮助我们更优雅测试软件处理异常时反应。...抱怨:对于抱怨需要分析其背后原因,可能正是能够帮助我们改进和优化业务价值好机会。 建议:一般用户可能难以提出高质量建议,需要我们收集反馈时候下点功夫,有针对性去收集。

968111

揭秘 SwiftData 数据建模原理

三个事实 了解下述三个事实对于更好地掌握和理解 SwiftData 建模原理以及为什么 SwiftData 采用本文介绍这些方法非常有帮助。... SwiftDataKit:让你在 SwiftData 中使用 Core Data 高级功能[3] 一文中,我介绍了如何调用 SwiftData 元素背后对应 Core Data 对象技巧。...BackingData 协议实例,比如:_DefaultBackingData 调用 createBackingData 时,SwiftData 不能仅依赖当前提供 schemaMetadata...SwiftData 利用这一功能,构造阶段持久化属性进行显式赋值,减轻了开发者工作量,也让模型代码声明更符合 Swift 语言逻辑。...剖析过程也是熟练运用一个框架重要途径。 代码解析过程中,我们不仅加深了 SwiftData 框架认识,也许多 Swift 语言新特性有了更直观了解,可谓一举两得。

32820

聊一聊,微服务下如何开展契约测试!

第一项服务扮演消费者角色,第二项扮演提供者角色。 当需要进行集成测试时,可以通过服务虚拟化来模拟正在与之通信微服务。这里服务提供者被模拟部署消费者服务之前,您希望证明其能正常工作。...当运行所有测试均为绿色您认为可以部署您服务了。 但是,如果您针对生产提供商运行服务,而不是模拟版本,则有可能失败。在这个例子中,提供者已经改变了数据格式。...消费者端配置Stub Runner 执行消费者测试 - Stub Runner嵌入了WireMock 检查验证结果 服务提供者 我们服务端编写一个简单服务接口,判断数字是奇数还是偶数 @RestController...例如 当我们运行构建时,运行 mvn clean install 插件自动生成一个名为ContractVerifierTest测试,它扩展我们BaseTestClass并将其放在/target...然后编写契约文件通过Spring Cloud Contractcontract verifier插件生成存根和服务提供方测试用例,消费方编写测试用例,通过StrubRunner模拟服务方来完成一次消费方调用服务方测试

2K20

Swift 5.6到5.10新特性整理

这个版本将在 Swift 6 之前弃这些替代入口点属性,转而使用 @main,并且 Swift 6 中使用它们产生错误。...当应用于类型(例如)时,这允许我们每个成员应用一个属性。这与较旧 @objcMembers 属性概念上是相同,它将 @objc 添加到类型中每个属性。...存在参数可以可选使用 SE-0375扩展了 Swift 5.7 一项功能,该功能允许我们使用协议调用泛型函数,从而修复了一个小但令人讨厌不一致之处:Swift 5.7 不允许可选类型使用此行为,...Swift 目标是让你可以很容易地将你 actor 了解转移到分布式 actor,但有一些重要区别可能让你感到困惑。...隐式打开存在类型 SE-0352 允许 Swift 许多情况下使用协议调用泛型函数。

1.4K10

走进 RxSwift 之观察者模式

第三章“流”,加之 Swift 函数式编程支持又很好,所以我原以为 RxSwift 内部实现会用延迟表来作为信号流,流来表示某个对象顺序状态时间史,这样一切都是函数,没有状态变化,也就不需要同步机制来保证线程安全了...其实如果是写过 C# 朋友,一定觉得这个Disposable非常熟悉,没错,它是一个协议(似乎微软系接口比较喜欢形容词,able结尾很多),跟 C# 中用来显式释放资源IDisposable...它声明协议ObservableType中: protocol ObservableType { /** hack: 因为 Swift 中没有范型协议,只能在协议中声明一个别名,...我猜是因为 Swift 中没有抽象和抽象方法概念,不能在函数前加 abstract 强制子类重写该方法,只能用这种不重写就终止方式来模拟抽象方法。...借助 typealias 模拟范型协议具体做法。 借助 fatalError 模拟抽象方法具体做法。 自旋锁、递归锁和两种原子操作用法。

1.2K20

能让 JS 执行 JavascriptCore ,到底是啥

JSVirtualMachine 每个实例都有自己堆和垃圾收集器,这意味着你不能在虚拟机之间传递对象。因为,如果你那样做的话,虚拟机垃圾收集器不知道如何处理来自不同堆值。... IOS 中调用 JS 代码 IOS 中要调用 JS,首先要在 swift 文件顶部引入 JavaScriptCore 包: import JavaScriptCore 接着,你可以 Swift... JS 中调用 ISO 代码 这部分应该是前端工程师比较关注。 默认情况下,Swift/Oc 任何方法或属性都不会暴露给 JavaScript。相反,必须选择要导出方法和属性。...JS Export 协议可以将你 Swift 及其实例方法、方法和属性导出到 JavaScript 代码。...@end JS 中可以这样调用上面的 OC/Swift 代码: // 使用构造函数语法调用 OC 初始化程序 var p = MyPoint(, ); // OC 方法成为构造函数对象上函数

1.4K20

有效只读属性

任何 属性 或 下标 提及均是指该成员只读版本。而且除了特殊指定,本文中同步,异步,async和sync定义均来自SE-0296. 效果是函数可观察行为。...但是,如果isAvailable属性get方法使用async声明,Swift 类型系统就是强制开发者去使用await,这就可以告诉开发者属性访问返回结果之前可能异步挂起。...此规则反映了如何具有效果词修饰函数进行一致性检查:协议具体实现可能遗漏某个效果词,但是它不能展示协议中没有指定效果词。...此规则是子类化本质结果:基必须考虑其子类可能展示所有效果说明符。本质上,该规则和协议一致性规则相同。...本篇提案初衷是允许计算属性和下标中使Swift 并发特性。为有效只读属性提议设计实现起来轻量而且简单,同时为现有的程序提供明显好处。

1.8K60

swift4.0语法杂记(精简版)

取消了Objective-C中指针等其他不安全访问使用 使用点语法来调用属性或者函数 去除了NS前缀 3、为什么要学习swift swift作为面向协议语言,不仅能写移动端,也可以做到搭建服务器端。...swift中所有的代码都被封装在{}里面 OC使用alloc init进行初始化,而swift使用() OC中使用[]来调用方法,而swift中采用点语法。...如果KVC方式一定要先调用构造函数。因为系统默认调用是放在方法最后面调用。...封装一个网络请求HttpTool.swift继承自NSObject 异步线程模拟网络数据请求,再回到主线程中回调闭包 class HttpTool: NSObject { //闭包类型:...编译时如果编译器发现没有任何地方调用 Date 进行大小比较方法,编译器移除 Comparable 协议实现,来达到减小包大小目的。

15.1K90

苹果推出 SwiftData,可替代 SwiftUI Core Data

SwiftData 可轻松将一个 Swift 转换为一个持久化模型,非常适合同 SwiftUI 一并使用。...Core Data 通常是 Xcode 内集成 Schema Model 编辑器上使用,由此生成 .xcdatamodeld 是真实之源,可被用于自动生成存根(stub)。...Bool、Int、String 等简单类型支持开箱可用,但更为复杂类型则必须要符合 Codable 协议,才能于持久化中使用。 如上文所述,SwiftData 与 SwiftUI 相性很好。...而事实上,@Model 宏也符合 ObservableObject 协议同时,让所有持久化属性表现为 @Published 属性形式。...SwiftData 中还提供谓词(Predicate)定义支持,可用于过滤数据。编译时谓词进行检查,并类型不匹配问题报编译错误。

89330

设计模式(一):“穿越火线”中“策略模式”(Strategy Pattern)

有童鞋说了,SwiftProtocol(协议,也就是Java中接口)可以提供默认实现。...如果在Swift中使用接口默认实现的话,如果要对上述军官扩充装备的话,设计中图”(不是图,但与图相似)实现如下所示: ?...在上面的图”中我们可变“武器策略进行了提取”。我们使用了WeaponBehavior协议来规定武器策略,使得不同武器对外有统一接口,在此就是使用武器,也就是开火。...军官中也有一个基中定义了军官共性,其中依赖于“武器策略”接口。军官超中使用“武器策略”协议声明了一个对象,该对象就是该军官所采取武器策略。...如果对此你感觉到抽象的话,那么我们接下来就用相应Swift代码去实现上述示例。也就是将上面的理论部分进行具体实现,当然在此我们Swift语言,但是,你完全可以使用其他面向对象编程语言。

69760

Swift 周报 第三十七期

在上面,我们声明了一个元组扩展,因此draw()见证者元组上实现了协议要求 draw()。实际实现每个元素调用 draw(),它本身符合 Shape。...当元组类型调用协议要求时,由元组类型元素形成一个包;这成为调用协议见证中每个 T 通用参数。 孤儿规则 大多数情况下,元组一致性行为就好像它们是标准库类型上用户定义追溯一致性。...如果某个函数本身使用参数包从包中形成元组值,则该值调用协议要求将调用元组一致性见证或单个元素见证,具体取决于包大小。 标记元组和方差 元组标签不是参数包可以抽象东西。...为了继承情况下 D 替换 C 是有效,我们要求 Self 仅用于协变或逆变位置,而不是不变。因此,我们必须元组施加与当前非最终相同限制。...讨论无法从 Objective C 调用 swift 扩展方法[8] 我为 ViewController 创建了 swift 扩展,并在其中定义了一种方法。

16430

【面试必备】Swift 面试题及其答案

问题2- Swift 1.0 or later Swfit中,什么时候结构体,什么时候? 答案:一直都有这样争论:到底是做法优于结构体,还是结构体做法优于。...函数式编程倾向于值类型,面向对象编程更喜欢Swift 中,和结构体有许多不同特性。下面是两者不同总结: 支持继承,结构体不支持。...注意:在运行时,结构体性能方面更优于,原因是结构体方法调用是静态绑定,而方法调用是动态实现。这就是尽可能得使用结构体代替又一个好原因。...1、泛型 2、泛型结构体 3、泛型协议 答案: Swift 包含1和2特性。泛型可以、结构体、枚举、全局函数或者方法中使用。 3是通过typealias部分实现。...高级 问题1- Swift 1.2 Swift1.2版本中,你能解释一下泛型来声明枚举问题吗?

2.7K20

iOS之深入解析Xcode 13正式版发布40个新特性

二、通用 Xcode 13 包括 Swift 并发编程原生支持、 Xcode Cloud 持续集成和交付支持、 Git 拉取请求集成支持、使用 DocC Swift 框架中创建和查看文档能力...三、Clang 编译器 为了支持新 Swift 并发模型,clang 现在可以您多次调用完成处理程序或执行路径没有完成处理程序调用时发出警告; 新 -fobjc-constant-literals...; 视图控制器大小检查器中使用 Freeform 模拟度量 Storyboard 场景现在可以直接在画布中使用调整大小旋钮调整大小; NSButton 斜角类型 macOS 12 中支持斜角颜色...; 从 Swift 协议或方法声明跳转到定义还可以轻松导航到整个工作区中所有子类、扩展和符合协议类型; Xcode 13 包括重新设计 Swift 代码完成功能,可最大限度地提高可靠性和性能,...Transparency 框架重置受保护资源“用户跟踪”授权状态; Swift 编写测试方法可能会被标记为异步或异步抛出,以允许调用和等待来自异步 API 结果,作为 Swift 并发语言功能一部分

8.7K40

Android 中构建快速可靠 UI 测试

最终测试中应当表现得如同超人一般能够迅速点击任意一个位置而且并不会报错,吧?我认为mocking测试很糟糕。为什么我们需要在测试时候改变应用行为?那不是欺骗吗?...在下面的例子中你可以看到一个模拟UserApi 并且stub(译者注:stub,也即“桩”,主要出现在集成测试过程中,从上往下集成时,作为下方程序替代。...比如说,如果你直接从你activity中使用HttpURLConnection调用REST API 进行数据访问(我希望你不要这么做), 这个操作过程模拟起来也就会非常困难。...这也就意味着如果我们我们Application中初始化TestComponent会使用模拟DataManager对象。...2调用Statement evaluate()方法(这是test时候执行) 3 设置Applicationcomponent字段为空,也就让其恢复到初始状态。

91410
领券