【发布时间】:2014-08-02 04:07:51
【问题描述】:
如何在 Swift 中模拟对象?
Mirror 协议听起来很有希望,但它现在并没有多大作用。
到目前为止,我发现的唯一方法是子类化并覆盖模拟类的所有方法。这当然不是真正的模拟,远非理想,而且工作量很大。
还有其他想法吗?
为什么不 OCMock?
来自source:
我可以通过语言桥功能使用 OCMock 吗?
是的,但是 有限制。如果你很勇敢。到目前为止,这是高度 实验性的。不能保证 OCMock 将完全支持 斯威夫特。
已知限制:
- 测试必须用 Objective-C 编写
- 应该模拟的对象必须从 NSObject 继承
- 没有存根/期望/验证类方法
【问题讨论】:
-
我仍然不知道反射在 Swift 中是如何工作的。也许我们需要等到 Apple 发布更多文档和更多 Swift 功能。 (而且 Swift 比 ObjC 更静态,由于静态调度、
@final方法等,这会使模拟变得更加困难) -
为什么不使用 OCMock?只需在 Bridging Header 文件中导入框架即可。我就是这么做的。
-
@AlexReynolds 我喜欢 OCMock,但(可以理解)它对 Swift 有严重的限制。我用更多信息更新了这个问题。
-
如果您也使用 OBJc,则没有真正的限制。我在 swift xctest 中使用 ocmock。您可以通过我在此处的回答stackoverflow.com/questions/24049735/… 解决我知道的唯一限制,如果使用 XCTAssertNoThrow 进行模拟验证
-
@AlexReynolds OCMock 是为 ObjC 设计的。它不适用于斯威夫特。我们现在像 ObjC 代码一样编写 Swift 代码,因为我们曾经使用过 ObjC,但将来不会这样。我们将使用大量 Swift 结构/枚举,而 OCMock 无法处理它们。唯一的解决方案是为 Swift 实现一些 Swift 模拟库。但是我们还不知道如何在 Swift 中模拟非 ObjC 相关的代码。
标签: unit-testing mocking swift