【发布时间】:2010-01-06 18:24:37
【问题描述】:
我有一个依赖于 NSUserDefaults 的类,我正在尝试对其进行单元测试,并且我将 NSUserDefaults 作为模拟提供到我的测试类中。运行测试时,我收到错误:
OCMockObject[NSUserDefaults]: 调用了意外的方法: dictionaryForKey:@"响应"
我正在尝试模拟 NSUserDefaults 类的这个实例方法:
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
使用调用格式:
[[[mockClass stub] andReturn:someDictionary] dictionaryForKey:@"aKey"]
告诉模拟它需要接受 dictionaryForKey 方法。但不知何故,这没有被记录下来,或者不是告诉模拟期望的正确事情,因为错误告诉我模拟永远不知道期望“dictionaryForKey”调用。
我调用存根的 andReturn 的方式似乎非常相似to this question 但在那个中,发帖人说他们正在获得一个返回值。 我的测试用例:
-(void)testSomeWork
{
id userDefaultsMock = [OCMockObject mockForClass:[NSUserDefaults class]];
MyClass *myClass = [[MyClass alloc] initWith:userDefaultsMock];
NSDictionary *dictionary = [NSDictionary dictionary];
[[[userDefaultsMock stub] andReturn:dictionary] dictionaryForKey:@"response"];
BOOL result = [myClass doSomeWork];
STAssertTrue(result, @"not working right");
[myClass release];
[userDefaultsMock verify];
}
我的班级:
@implementation MyClass
@synthesize userDefaults;
- (id)initWith:(NSUserDefaults *aValue)
{
if (self = [super init])
{
self.userDefaults = aValue;
}
return self;
}
- (BOOL)doSomeWork
{
NSDictionary *response = [userDefaults dictionaryForKey:@"response"];
if (response != nil)
{
// some stuff happens here
return YES;
}
return NO;
}
@end
有什么建议吗?
【问题讨论】:
标签: iphone objective-c ocmock