zou*_*oul 16 cocoa unit-testing nsuserdefaults
在我的大多数使用默认值的类中,我将默认对象设置为可设置:
@property(retain) NSUserDefaults *defaults;
Run Code Online (Sandbox Code Playgroud)
这应该使测试更容易:
// In a nearby test class:
- (void) setUp {
[super setUp];
NSUserDefaults *isolatedDefaults = [[NSUserDefaults alloc] init];
[someObjectBeingTested setDefaults:isolatedDefaults];
}
Run Code Online (Sandbox Code Playgroud)
但是现在我发现当我创建一个新的默认对象时,它已经有了一些值.那可能吗?我以为我可以通过调用创建一个空的,独立的默认对象-init.我是否在测试代码中的某处有错误,或者如果我想测试基于默认值的代码,我是否真的需要做一些更复杂的事情(如存根或模拟)?
从NSUserDefaults文档:
init:返回使用当前用户帐户的默认值初始化的NSUserDefaults对象.
这通常不应该是空的.我不确定你想在这里测试什么,因为测试NSUserDefaults功能会浪费时间.
但是说你需要一些密钥才能让你的测试没有注册,总是有相同的初始点:然后在setUp中删除它们(如果你愿意,可以在tearDown中恢复它们).
就像是:
- (void) setUp {
[super setUp];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myTestKey"];
// synchronize the change, or just use resetStandardUserDefaults:
[someObjectBeingTested setDefaults:[NSUserDefaults resetStandardUserDefaults]];
}
Run Code Online (Sandbox Code Playgroud)
如果您没有特定的密钥列表但需要清除所有密钥,则必须使用CoreFoundation首选项实用程序,请参阅CFPreferencesCopyKeyList.
| 归档时间: |
|
| 查看次数: |
6049 次 |
| 最近记录: |