【发布时间】:2015-02-10 15:36:49
【问题描述】:
目前正在使用 Kiwi BDD 框架为一个类编写一个测试单元。 下面是需要测试的方法:
- (SFErrorType)typeForError:(NSError *)error {
NSError *innerError = error.userInfo[SFInnerErrorUserInfoKey];
if (innerError) {
return [self typeForError:innerError];
}
return SFErrorTypeUndefined;
}
方法属于 SFErrorUtility 类。 SFErrorType - 是一个“typedef NS_NUM”,有 2 种类型 - 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”字典不是私有的(只读)吗? Device 根据发生的任何错误自己构造“错误”对象。那么我们为什么要为它分配诸如“SFInnerErrorUserInfoKey”之类的键呢?可能有一些我不明白的基本方面。
【问题讨论】:
-
您的问题不清楚。您是否在问如何将一个
NSError实例的userInfo传递给您正在创建的新实例? -
详细解释你的问题
-
对于测试单元,我需要创建一个错误对象,因为它作为我正在测试的方法的参数传递。为了创建一个错误对象,我从方法的实现中收集信息。我问题中的第一行代码来自方法实现。它给了我一些线索如何构造我需要的错误对象,线索是“userInfo”。我不明白的是我如何能抓住这个线索并创建一个独立的错误对象。
-
显示一些相关的代码,这样我们就可以看到你有什么。添加注释,说明您要创建的内容。
标签: ios objective-c