Objective c 如何在测试用例中使用AppDelegate?

Objective c 如何在测试用例中使用AppDelegate?,objective-c,macos,xcode5,appdelegate,xctest,Objective C,Macos,Xcode5,Appdelegate,Xctest,在多个类中,我使用[NSApp delegate]从访问某些属性的位置获取主AppDelegate。这正如预期的那样工作,但是当我对使用它的代码进行单元测试时,这个委托是nil 在我的测试中如何处理这个问题?是否可以编写一个mock或其他东西?创建一个单独的单例类,该类可用于存储全局属性,并让App Delegate执行其委托角色,仅此而已: AppProperties.h: @interface AppProperties : NSObject @property (strong, nona

在多个类中,我使用
[NSApp delegate]
从访问某些属性的位置获取主AppDelegate。这正如预期的那样工作,但是当我对使用它的代码进行单元测试时,这个委托是nil


在我的测试中如何处理这个问题?是否可以编写一个mock或其他东西?

创建一个单独的单例类,该类可用于存储全局属性,并让App Delegate执行其委托角色,仅此而已:

AppProperties.h:

@interface AppProperties : NSObject

@property (strong, nonatomic) NSString *prop1;
@property (strong, nonatomic) NSNumber *prop2;
@property (strong, nonatomic) NSMutableArray *prop3;

+ (AppProperties *)sharedInstance;

@end
AppProperties.m:

@implementation AppProperties

@synthesize prop1, prop2, prop3;

+ (AppProperties *)sharedInstance {
    static AppProperties *instance = nil;
    static dispatch_once_t onceToken = 0;
    dispatch_once(&onceToken, ^{
        instance = [[AppProperties alloc] init];
    });
    return instance;
}

@end

这些是什么性质的?听起来他们需要在不同的班级,而不是应用程序委派;可能使用单例模型。例如,我有一个自定义的UserSettings属性。你是对的,也许把这个财产放在别处是有道理的。我只是认为AppDelegate是一个可以从任何地方访问的全局类,这使它成为存储全局数据的一个很好的选择。不过,在这种情况下,有一个不同的类是很方便的,它不充当应用程序存储这些属性的委托。它应该很容易移动和实现。也许向UserSettings类添加一个静态方法是有意义的,它可以提供UserSettings对象的全局实例,我可以在我的应用程序周围的类中使用。我应该只添加一个静态实例变量来保存这个实例,并添加一个静态方法来传递这个实例吗?这是一个公平的解决方案吗?不,我认为让它成为头等舱,呃,头等舱,从长远来看会有好处。这真的一点工作都没有。