【问题标题】:How to construct an Error object. iOS如何构造一个错误对象。 iOS
【发布时间】: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


【解决方案1】:

我建议您使用 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];

希望这会有所帮助,因为我只是猜到了您的问题。

【讨论】:

  • 我需要使用 Kiwi BDD 框架。现在确定我是否可以在那里创建 OCMock 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多