OCMock 是如何工作的?

How does OCMock works?

我们一直在使用 OCMock 进行单元测试,它运行得非常好。 我们只是不确定它是如何工作的。猴子修补?预处理代码生成?

我试过谷歌搜索但没有成功。

有人知道 OCMock 是如何做到这一点的吗?

对于普通模拟的实例方法,OCMock 使用 forwardInvocation: 和朋友。这类似于其他语言中缺少的动态代理或方法。有关详细信息,您可以从此处的代码开始:

对于 class 方法和部分模拟,OCMock 使用猴子修补。在运行时,它创建 class(对于部分模拟)或元 class(对于 class 方法)的动态子classes,然后切换动态 class投入使用。代码的入口点:

为了设置模拟和存根,OCMock 严重依赖 C 宏。它使用一个巧妙的块技巧来实现带有点和圆括号的语法。我第一次看到这个是在 Expecta.