Мне кажется, что я не могу издеваться над NSUserDefaults. Я хочу, чтобы он отправлял обратно данные, которые я ему рассказывал, но вместо этого он отправляет обратно данные, хранящиеся в нем, при запуске приложения.Не удалось издеваться над NSUserDefaults
Я использую:
Specta
Expecta
OCMockito
У меня есть следующий тест:
describe(@"AppDelegate", ^{
__block AppDelegate *appDelegate;
beforeEach(^{
appDelegate = [AppDelegate new];
});
afterEach(^{
appDelegate = nil;
});
describe(@"application did finish launching with options", ^{
beforeEach(^{
[appDelegate application:nil didFinishLaunchingWithOptions:nil];
NSUserDefaults *mockUserDefaults = mock([NSUserDefaults class]);
[given([mockUserDefaults objectForKey:@"currentUser"]) willReturn:nil];
});
it(@"should have a login view controller as root view controller", ^{
expect(appDelegate.window.rootViewController).to.beKindOf([ToALoginViewController class]);
});
});
});
Так выше тест терпит неудачу, потому что он фактически возвращает некоторые данные для currentUser
. Что я делаю не так?
Исходя из того, что сказал Кен Кван, я сделал следующие изменения:
AppDelegate.h
@property (strong, nonatomic) NSUserDefaults *userDefaults;
- (void)setUserDefaults:(NSUserDefaults *)userDefaults;
AppDelegate.m
- (void)setUserDefaults:(NSUserDefaults *)userDefaults {
_userDefaults = userDefaults;
}
AppDelegateSpec.m
beforeEach(^{
[appDelegate application:nil didFinishLaunchingWithOptions:nil];
NSUserDefaults *mockUserDefaults = mock([NSUserDefaults class]);
[appDelegate setUserDefaults:mockUserDefaults];
[given([mockUserDefaults objectForKey:@"currentUser"]) willReturn:nil];
});
Однако, я все еще получаю ту же проблему.
Я попытался установить свойство на appDelegate и сделать это таким образом, но все же получил тот же результат. Я обновил свой пост, чтобы показать изменения, которые я сделал. Я что-то пропустил? – Hodson
Где вы использовали пользовательские значения по умолчанию в делегате приложения? –
В 'application: didFinishLaunchingWithOptions:' Я устанавливаю 'self.userDefaults' в' standardUserDefaults', а затем сразу же проверяю ключ 'currentUser'. Результат этого значения затем определяет, как установить 'rootViewController' как. – Hodson