我似乎無法模擬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 2014-10-09 14:12:47
您在應用程序委託中使用了哪些用戶默認設置? – 2014-10-09 14:15:26
在'application:didFinishLaunchingWithOptions:'我設置'self.userDefaults'爲'standardUserDefaults',然後馬上檢查'currentUser'鍵。這個值的結果決定了將'rootViewController'設置爲什麼。 – Hodson 2014-10-09 14:18:10