小编典典

为什么单元测试中的代码找不到捆绑资源?

all

我正在单元测试的一些代码需要加载资源文件。它包含以下行:

NSString *path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"txt"];

在应用程序中它运行得很好,但是当由单元测试框架运行时pathForResource:返回 nil,这意味着它无法找到foo.txt.

我已经确保它foo.txt包含在单元测试目标的 Copy Bundle Resources 构建阶段,为什么它找不到该文件?


阅读 60

收藏
2022-07-06

共1个答案

小编典典

当单元测试工具运行您的代码时,您的单元测试包 不是 主包。

即使您正在运行测试,而不是您的应用程序,您的应用程序包仍然是主包。(大概,这可以防止您正在测试的代码搜索错误的包。)因此,如果您将资源文件添加到单元测试包,如果搜索主包,您将找不到它。如果将上面的行替换为:

NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"foo" ofType:@"txt"];

然后你的代码将搜索你的单元测试类所在的包,一切都会好起来的。

2022-07-06