【问题标题】:Included category propagates to other included files?包含的类别传播到其他包含的文件?
【发布时间】:2013-10-11 23:40:52
【问题描述】:

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

我的想法是在 NSDate (NSDate+Test) 上放置一个自定义测试类别。但是,此时我不再确定该类别将如何以及在何处传播。我的意思是,我的被测类(使用 NSDate)会自动开始使用 NSDate+Test 吗?

只是为了说明:

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

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

【问题讨论】:

    标签: objective-c unit-testing categories propagation


    【解决方案1】:

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

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

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

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


    *至少在 ARC 下。

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

    【讨论】:

    • 好的,非常感谢!这是我所怀疑的,但没有清楚地理解为什么。现在我知道了!
    猜你喜欢
    • 2021-11-09
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2022-11-11
    • 2020-12-10
    • 2011-06-24
    相关资源
    最近更新 更多