ios - 对类别中的私有(private)方法进行单元测试?

标签 ios objective-c cocoa-touch unit-testing

我在 NSString 类上有一个类别,其中包含一个私有(private)辅助方法。 如果我可以在我的单元测试中使用这个方法,那将会很方便。 但是我很难揭露它。 当我在 NSString 上创建类扩展并在此处声明方法时,该方法在单元测试中不可见。如果我在单独的头文件中或作为单元测试 .m 文件的一部分创建类扩展并不重要。

看来我在这里遗漏了什么。

有什么帮助吗?

最佳答案

通用单元测试指南会告诉您不要尝试和测试您的私有(private)方法。仅通过您的公共(public)接口(interface)进行测试。私有(private)方法只是一个实现细节,可以在您重构时随时更改。您的公共(public)接口(interface)应该非常稳定,并且会使用您的私有(private)方法。

但是,如果您仍想测试您的私有(private)类别方法,以下方法对我有用...

首先,您的类别:

UIImage+Example.h

@interface UIImage (Example)    
@end

UIImage+Example.m

@implementation UIImage (Example)

+ (NSString *)examplePrivateMethod
{
    return @"Testing";
}

@end

MyExampleTests.m

#import <XCTest/XCTest.h>
#import "UIImage+Example.h"

@interface UIImage (Example_Test)
+ (NSString *)examplePrivateMethod;
@end

@interface MyExampleTests : XCTestCase
@end

@implementation MyExampleTests

- (void)testExample
{
    XCTAssertEqualObjects(@"Test", [UIImage examplePrivateMethod], @"Test should be test");
}

@end

本质上,在测试的新类别中重新声明您的私有(private)方法。然而,如上所述,这只是为了测试目的而公开私有(private)方法,并将您的测试与您的实现相结合。

关于ios - 对类别中的私有(private)方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290404/

相关文章:

iOS 滑动抽屉

ios - [iOS][后台]更新 map 图钉 |画线

ios - Xib 中的 SubViews MainView 为什么不显示在 iOS 中?

ios - swift3 日期到数据,数据到日期转换

ios - 在 IOS 中创建事件时,日历事件添加了多次

ios - Chartboost 委托(delegate)集成警告

iOS AutoLayout - 标签与附近的标签重叠

iphone - 如何使 UISegmentedControl 的选定部分变暗?

Objective-C:self = nil 不会将实例设置为空值

iOS QLPreviewController 从远程服务器 URL 加载文件