包含的类别传播到其他包含的文件?

时间:2013-10-11 23:40:53

标签: objective-c unit-testing categories propagation

所以,基本上这就是我想做的事情。我正在测试一个类,为了做到这一点,我想重新定义“今天”(或“现在”),这意味着我可以简单地通过说明“明天就是现在”来测试日期转换和其他相关属性,然后写下我的断言。

我的想法是在NSDate上安装自定义测试类别(NSDate + Test)。但是,此刻我不再确定该类别的传播方式和位置。我的意思是,我的测试类(使用NSDate)会自动开始使用NSDate + Test吗?

只是为了说明:

#include "MyClassUnderTest.h"
#include "NSDate+Test.h"

// Will MyClassUnderTest.h see and use NSDate+Test at all times?

1 个答案:

答案 0 :(得分:0)

运行时很乐意将方法添加到NSDate,但如果您尝试发送一条尚未声明的消息,编译器将会出错。*

因此,只要您导入标题,您的类就可以使用新方法。

如果你在谈论一个类别中“覆盖”框架类的方法,你应该知道在你的进程中使用该方法的每个将使用新版本。因此,如果你破坏+[NSDate date],即使是对date的Cocoa内部调用也将使用你的版本。**这很容易导致奇怪甚至危险的行为。你应该更喜欢嘲笑这种破坏。

另请注意,由于这种现象,您应该始终前缀通过类别添加到框架类的方法。


*在ARC下,至少。

**假设date本身并未在某个类别中实施;在这种情况下,结果是“未定义的行为”。