所以,基本上这就是我想做的事情。我正在测试一个类,为了做到这一点,我想重新定义“今天”(或“现在”),这意味着我可以简单地通过说明“明天就是现在”来测试日期转换和其他相关属性,然后写下我的断言。
我的想法是在NSDate上安装自定义测试类别(NSDate + Test)。但是,此刻我不再确定该类别的传播方式和位置。我的意思是,我的测试类(使用NSDate)会自动开始使用NSDate + Test吗?
只是为了说明:
#include "MyClassUnderTest.h"
#include "NSDate+Test.h"
// Will MyClassUnderTest.h see and use NSDate+Test at all times?
答案 0 :(得分:0)
运行时很乐意将方法添加到NSDate
,但如果您尝试发送一条尚未声明的消息,编译器将会出错。*
因此,只要您导入标题,您的类就可以使用新方法。
如果你在谈论一个类别中“覆盖”框架类的方法,你应该知道在你的进程中使用该方法的每个将使用新版本。因此,如果你破坏+[NSDate date]
,即使是对date
的Cocoa内部调用也将使用你的版本。**这很容易导致奇怪甚至危险的行为。你应该更喜欢嘲笑这种破坏。
另请注意,由于这种现象,您应该始终前缀通过类别添加到框架类的方法。
*在ARC下,至少。
**假设date
本身并未在某个类别中实施;在这种情况下,结果是“未定义的行为”。