目前正在使用Kiwi BDD框架为类编写测试单元。 以下是需要测试的方法:
- (SFErrorType)typeForError:(NSError *)error {
NSError *innerError = error.userInfo[SFInnerErrorUserInfoKey];
if (innerError) {
return [self typeForError:innerError];
}
return SFErrorTypeUndefined;
}
方法属于SFErrorUtility类。 SFErrorType - 是一个“typedef NS_NUM”,它有两种类型 - SFErrorTypeUndefined和SFErrorTypeAlert。
SFInnerErrorUserInfoKey是一个NSString。
问题1.需要编写一个测试单元来测试该方法:
it(@" 6.6 should return [errorUtility typeForError:innerError] if innerError object can be created with userInfo - SFInnerErrorUserInfoKey",
^{
// something should be created here, probably an innerError object
// my question is how to create this error object?
NSError *error = [NSError errorWithDomain: something code:nil userInfo:nil];
[[errorUtility typeForError:error] should] equal: [errorUtility typeForError:innerError]];
}
);
错误的对象包括: NSError error = [NSError errorWithDomain:(NSString )代码:(NSInteger *)userInfo:(NSDictionary *)];
我们从方法实现中得到关于错误的“userInfo”参数的线索。但我不明白我们如何使用它来创建我们自己的错误对象。 我一般不明白这行代码会发生什么:
NSError *innerError = error.userInfo[SFInnerErrorUserInfoKey];
问题2.我们通过向错误对象询问其“userInfo”字典来创建指针,我们问“你在”SFInnerErrorUserInfoKey“键下面有什么内容?”这是正确的吗?
问题3.最后一个问题,是不是“userInfo”字典是私有的(只读)?设备根据发生的任何错误自行构造“错误”对象。那么我们为它分配密钥怎么样,比如“SFInnerErrorUserInfoKey”?可能有一些我不理解的基本方面。答案 0 :(得分:0)
我建议您使用OCMock并执行以下操作:
id errorMock = [OCMockObject mockForClass:[NSError class]];
[[[errorMock stub] andReturn:@"YourErrorDomain"] domain];
[[[errorMock stub] andReturnValue:@1] code]; //some error code
[[[errorMock stub] andReturnValue:@{@"expectedKey":@"expectedValue"}] userInfo];
[sut yourMethodFailWithError: errorMock];
希望这有帮助,因为我只是猜到了你的问题。