我正在解析一些 json 以返回基本字符串令牌或错误消息。
- (void)callBackWithVerifyHttpResponse:(NSData *)response
{
SomeResult *result = [self.parser parseVerifyHttpResponseAndReturnResult:response];
if (result.token) { [self.delegate callBackWithToken:result.token]; }
if (result.error) { [self.delegate callBackWithError:result.error]; }
}
证明这一点的测试
- (void)testVerifyCallbackInvokesErrorCallbackOnDelegateWhenParserReturnsError
{
SomeResult *result = [[SomeResult alloc] init];
result.error = @"fail";
[[self.delegate expect] callBackWithError:@"fail"];
[[self.delegate reject] callBackWithToken:OCMArg.any];
[[[self.parser stub] andReturn:result] parseVerifyHttpResponseAndReturnResult:nil];
[self.sut callBackWithVerifyHttpResponse:nil];
[self.delegate verify];
}
- (void)testVerifyCallbackInvokesTokenCallbackOnDelegateWhenParserReturnsToken
{
SomeResult *result = [[SomeResult alloc] init];
result.token = @"token";
[[self.delegate expect] callBackWithToken:@"token"];
[[self.delegate reject] callBackWithError:OCMArg.any];
[[[self.parser stub] andReturn:result] parseVerifyHttpResponseAndReturnResult:nil];
[self.sut callBackWithVerifyHttpResponse:nil];
[self.delegate verify];
}
一切都很好,直到我将它连接到一个实际的端点 - 只是发现除非我像下面这样修改回调 - 它正在调用两个回调(不是我希望的)
- (void)callBackWithVerifyHttpResponse:(NSData *)response
{
SomeResult *result = [self.parser parseVerifyHttpResponseAndReturnResult:response];
if (result.token != [NSNull null]) { [self.delegate callBackWithToken:result.token]; }
if (result.error != [NSNull null]) { [self.delegate callBackWithError:result.error]; }
}
所以 2 部分问题
为什么我不能写一个测试来证明这一点?每当我将错误或令牌设置为 NULL 或 NSNull 时,它都可以正常工作(但生产工作需要此代码)
为什么生产代码只会在条件条件下失败
!= [NSNull null]
(但我似乎什么也得不到,但是<null>
当我在模拟器中运行它时 NSLog 值时?
请记住,SomeResult 对象上的令牌/错误属性如下所示
@interface SomeResult : NSObject
@property (strong, nonatomic) NSString *token;
@property (strong, nonatomic) NSString *error;
@end