我正在尝试对从plist文件加载和查询数据的代码进行单元测试。我正在使用代码加载数据:
NSString *path = [[NSBundle mainBundle] pathForResource:@"availableshops" ofType:@"plist"];
NSArray *arrayOfShops = [[NSArray alloc] initWithContentsOfFile:path];
在模拟器和设备上测试应用程序时,一切正常。但是当我运行单元测试时,代码“[arrayOfShops count]
”始终返回“0
”。
我在主要目标和单元测试目标的“复制包资源”,“编译源”和“链接二进制库”中有相同的文件。我也尝试使用和不使用主目标作为单位测试目标的“直接相关性”。
有谁知道这是什么问题?
答案 0 :(得分:2)
您不能将[NSBundle mainBundle]
与Xcode单元测试一起使用,如果您使用此代码将会有效:
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"availableshops" ofType:@"plist"];
NSArray *arrayOfShops = [[NSArray alloc] initWithContentsOfFile:path];
答案 1 :(得分:1)
见this answer。显然mainBundle
在测试包的上下文中不起作用。
答案 2 :(得分:0)
你确定plist根元素是一个数组吗?发布plist可能有所帮助。
你也可以试试这个:
NSArray* shopsArray = [NSArray arrayWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"availableshops.plist"];