【问题标题】:How to unit test a non-public method of a class in objective-c?如何在objective-c中对类的非公共方法进行单元测试?
【发布时间】:2014-01-08 16:16:25
【问题描述】:

我在我的类的类别扩展中定义了一个函数。

虽然这个函数不是公共 API,但它是一个重要的函数,我希望能够对这个函数进行单元测试。

在单元测试中,正如预期的那样,XCode 抱怨该函数未声明。

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 在 Objective-C 中没有私有方法这样的东西——你总是可以得到它。只是有些保镖比其他人好。

标签: objective-c unit-testing xcode5


【解决方案1】:

通常你应该只测试接口,所以也许这个方法实际上应该是公共的。如果您仍然希望该方法是私有的并为其编写单元测试,您可以在类别中重新声明该方法:

就在你的测试类之前添加:

@interface ClassUnderTest (IReallyWantToTestPrivateMethodsEvenThoughIShouldnt)
    - (void)thePrivateMethodToBeTested;
@end

【讨论】:

    【解决方案2】:

    不要测试私有方法。测试使用私有方法的公共方法。如果私有方法不起作用,那么使用它的公共方法的测试应该会失败。方法的工作原理(以及它调用的私有方法)是一个微不足道的实现细节,您的测试不应该关注它。测试结果,而不是测试结果的方式。

    有关原因的更多信息,请参阅此线程:https://softwareengineering.stackexchange.com/questions/100959/how-do-you-unit-test-private-methods(他们谈论 Java,但该原则适用于任何语言)。

    【讨论】:

      【解决方案3】:

      将该函数设为公开,但将声明放在#ifdef DEBUG 中,以便仅在测试时公开。发布的代码不会公开。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多