2013-10-08 3 views
3

В нескольких классах я использую [NSApp delegate], чтобы получить мой основной AppDelegate, откуда я обращаюсь к некоторым свойствам. Это работает так, как ожидалось, но когда I Unit Test код, который использует это, этот делегат nil.Как использовать AppDelegate в тестовых случаях?

Как я могу справиться с этим в своем тесте? Можно ли написать макет или что-то еще?

+0

Что это за свойства? Похоже, что они должны быть в разных классах, кроме App Delegate; возможно, используя синглтонную модель. – trojanfoe

+0

Например, у меня есть пользовательское свойство * UserSettings *. Вы правы, может быть, имеет смысл положить это свойство в другое место. Я просто вижу AppDelegate как глобальный класс, доступный из любого места, что делает его хорошим выбором для хранения глобальных данных. – dhrm

+0

В этом случае, однако, удобно иметь другой класс, который не действует, поскольку делегат приложения сохраняет эти свойства. Он должен быть легко перемещаться и реализовываться. – trojanfoe

ответ

3

Создать отдельный одноплодный класс, который может быть использован для хранения глобальных свойств, и оставить App Делегат делать свою роль делегирования и ничего больше:

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 
Смежные вопросы