我想公开一个视图控制器的私有属性,以便我可以测试它们。一种方法是在类上创建一个仅用于测试的类别,并使用类别方法来获取值。
// Class I want to test -- implementation
#import "SomeViewController.h"
@interface SomeViewController ()
@property (strong, nonatomic)UIActionSheet *sheet;
@end
// Category's header
#import "SomeViewController.h"
@interface SomeViewController (Test)
-(UIActionSheet *)getSheetValue;
@end
// Category's implementation
#import "SomeViewController+Test.h"
@implementation SomeViewController (Test)
-(UIActionSheet *)getSheetValue{
return self.sheet; // references private property
}
@end
有更好的方法吗?我想也许我可以在引用私有属性值的类别上创建一个公共sheet
属性,但找不到任何关于如何去做的好文档。在不依赖ivars的情况下测试私有财产的最佳做法是什么?
答案 0 :(得分:1)
私下您需要的方法已经存在,该类别只需要让它们对测试可见:
@interface SomeViewController (Test)
- (UIActionSheet *) sheet;
@end
您不需要实现该方法,但现在您可以使用它。如果使方法可见但在运行时实际上不存在,则只会出现问题。
答案 1 :(得分:0)
您也可以使用valueForKey:
,但它不是“干净”,因为您没有自动完成,如果您通过重构工具重命名该属性,可能会中断。但如果您不想创建类别,那么这是另一种选择。