0

问题:在运行单元测试时从 NSBundle 中检索返回(null),在运行时返回有效对象。

我做了什么 ?

我已经搜索了类似问题的 SO、苹果的开发人员和其他在线资源来解决这个问题,但没有运气。

我已经尝试过 SO questions 的解决方案;OCUnit & NSBundleNSBundle pathForResource 返回 nil

我在网上浏览的所有解决方案都指出一件事Bundle for run time 和测试是不同的。

他们都建议拥有

[NSBundle bundleForClass: [self class]];

代替

[NSBundle mainBundle];    

问题:我不明白上述修复是使用 setter 注入还是源文件本身。? 还有其他方法可以测试该方法getIpAdress吗?

代码

返回(null)的类,

// iRNetworkingObject.m

@implementation iRNetworkingObject

-(NSString*) getIpAdress {
     NSDictionary *infoDict = [[NSBundle bundleForClass:[self class]] infoDictionary];
     NSString *lookUpAdress = [infoDict objectForKey:@"LookUpIpAdress"];
     return lookUpAdress;
}
@end

测试班

- (void) testGetIpAdress {

    iRNetworkingObject* networkingObject = [[iRNetworkingObject alloc] init];
    NSString* testCase = @"192.168.2.1";
    NSString* encondedString = [networkingObject getIpAdress]];

    STAssertTrue([testCase isEqualToString:encondedString], @"Not equal");
}
4

1 回答 1

2

bundleForClass:在测试代​​码中很重要,以确保您获得应用程序包而不是测试包。您不必在生产代码中这样做。

您的密钥@"LookUpIpAdress"拼写错误。那是问题吗?

于 2013-03-19T03:37:02.360 回答