“plist”不会从iPhone单元测试类加载

时间:2009-11-16 13:00:37

标签: iphone unit-testing plist

我正在尝试对从plist文件加载和查询数据的代码进行单元测试。我正在使用代码加载数据:

NSString *path = [[NSBundle mainBundle] pathForResource:@"availableshops" ofType:@"plist"];
NSArray *arrayOfShops = [[NSArray alloc] initWithContentsOfFile:path];

在模拟器和设备上测试应用程序时,一切正常。但是当我运行单元测试时,代码“[arrayOfShops count]”始终返回“0”。

我在主要目标和单元测试目标的“复制包资源”,“编译源”和“链接二进制库”中有相同的文件。我也尝试使用和不使用主目标作为单位测试目标的“直接相关性”。

有谁知道这是什么问题?

3 个答案:

答案 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"];