Ale*_*ove 3 iphone objective-c ocmock
我有一个依赖于NSUserDefaults的类,我正在尝试进行单元测试,并且我将NSUserDefaults作为模拟提供给我的测试类.运行测试时,我收到错误:
OCMockObject [NSUserDefaults]:调用了意外的方法:dictionaryForKey:@"response"
我正在尝试模拟NSUserDefaults类的这个实例方法:
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
Run Code Online (Sandbox Code Playgroud)
使用通话格式:
[[[mockClass stub] andReturn:someDictionary] dictionaryForKey:@"aKey"]
Run Code Online (Sandbox Code Playgroud)
告诉mock它需要期望dictionaryForKey方法.但不知何故,这是没有记录或不是正确的事情告诉模拟预期,因为错误告诉我,模拟从来不知道期待'dictionaryForKey'调用.
我调用存根和返回的方式看起来与这个问题非常相似,但在那个问题中,海报说他们获得了返回值.我的测试用例:
-(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];
}
Run Code Online (Sandbox Code Playgroud)
我的课:
@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
Run Code Online (Sandbox Code Playgroud)
有什么建议?
小智 5
不确定你是否想出了这个,但它可能与使用stub验证有关.您应该使用expect with expect.
即
[[[userDefaultsMock expect] andReturn:dictionary] dictionaryForKey:@"response"];
...
[userDefaultsMock verify];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您使用验证来确认您的方法确实调用了预期的方法(dictionaryForKey :).您使用存根来允许您的方法在Mock对象上调用给定方法,但您不需要验证它是否被调用.
| 归档时间: |
|
| 查看次数: |
4096 次 |
| 最近记录: |