Ear*_*rey 8 cocoa-touch unit-testing objective-c ios
我在类上有一个NSString包含私有帮助器方法的类别.如果我可以在单元测试中使用这种方法,那将会很方便.但是我很难揭露它.当我在NSString上创建类扩展并在此声明方法时,该方法在单元测试中不可见.如果我在单独的头文件中创建类扩展,或者作为单元测试.m文件的一部分,则无关紧要.
看起来我在这里遗漏了一些东西.
有帮助吗?
Jam*_*ost 15
通用单元测试指南会告诉您不要尝试测试您的私有方法.仅通过您的公共接口进行测试.私有方法只是一个实现细节,可以在重构时随时更改.您的公共接口应该非常稳定,并将运用您的私有方法.
但是,如果您仍想测试您的私有类别方法,以下内容适用于我......
首先,您的类别:
@interface UIImage (Example)
@end
Run Code Online (Sandbox Code Playgroud)
@implementation UIImage (Example)
+ (NSString *)examplePrivateMethod
{
return @"Testing";
}
@end
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)
基本上,在测试中的新类别中重新声明您的私有方法.但是,如上所述,这是为了测试而将私有方法公开,并将测试与您的实现相结合.
您可以通过简单地performSelector:在对象上执行任何方法(私有或非私有),如下所示:
[something performSelector:@selector(somePrivateMethod)];
Run Code Online (Sandbox Code Playgroud)
但我同意詹姆斯的看法,你应该在绝对必要的时候这样做.
| 归档时间: |
|
| 查看次数: |
3609 次 |
| 最近记录: |