我正在单元测试的一些代码需要加载资源文件。它包含以下行:
NSString *path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"txt"];
在应用程序中它运行得很好,但是当由单元测试框架运行时pathForResource:返回 nil,这意味着它无法找到foo.txt.
pathForResource:
foo.txt
我已经确保它foo.txt包含在单元测试目标的 Copy Bundle Resources 构建阶段,为什么它找不到该文件?
当单元测试工具运行您的代码时,您的单元测试包 不是 主包。
即使您正在运行测试,而不是您的应用程序,您的应用程序包仍然是主包。(大概,这可以防止您正在测试的代码搜索错误的包。)因此,如果您将资源文件添加到单元测试包,如果搜索主包,您将找不到它。如果将上面的行替换为:
NSBundle *bundle = [NSBundle bundleForClass:[self class]]; NSString *path = [bundle pathForResource:@"foo" ofType:@"txt"];
然后你的代码将搜索你的单元测试类所在的包,一切都会好起来的。