0

So, basically here's what I want to do. I'm testing a class and in order to do that I want to redefine "today" (or "now"), meaning that I can test date transitions and other related properties simply by stating, say, "tomorrow is now" and then write my asserts.

My idea is to put a custom Test category on NSDate (NSDate+Test). But, at this moment I'm no longer sure how and where that category will propagate. I mean, will my class-under-test (that uses NSDate) automatically start to use NSDate+Test?

Just to illustrate:

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

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

1 回答 1

0

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

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

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

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


*至少在 ARC 下。

**假设它date最初本身没有在一个类别中实现;在这种情况下,结果是“未定义的行为”。

于 2013-10-12T00:21:34.813 回答