如何在 Xcode 中加载本地 json 文件以进行单元测试?

Posted

技术标签:

【中文标题】如何在 Xcode 中加载本地 json 文件以进行单元测试?【英文标题】:How to load a local json file in Xcode for unit test purposes? 【发布时间】:2016-01-24 20:23:35 【问题描述】:

所以我已将文件testJson1.json 添加到我的项目中。

在单元测试中,我尝试获取文件路径但没有任何运气:

NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *filepath = [bundle pathForResource:@"testJson1.json" ofType:@"json"];

当我查看项目文件时,我可以奇怪地看到该文件已添加到资源中,我认为不会将单元测试文件添加到资源中以减小应用程序大小。

8AA238811C5565E80031648E /* testJson1.json in Resources */ = isa = PBXBuildFile; fileRef = 8AA2387F1C5565E80031648E /* testJson1.json */; ;

请问我错过了什么?

【问题讨论】:

您确定您的文件已在Target Membership 中检查iTagNewsTests 目标File inspector(右侧面板中的第一个选项卡)。 会不会是不需要资源名中多余的.json?那就试试[bundle pathForResource:@"testJson1" ofType:@"json"]? @alfigueroa 是的,就是这样。我真傻。 :) 随意添加答案 @Houman 当然,以防有人跳过 cmets! 【参考方案1】:

您只需要从资源名称中删除 .json,因为这不是必需的 :)

NSString *filepath = [bundle pathForResource:@"testJson1" ofType:@"json"];

【讨论】:

【参考方案2】:

假设您有一个上图中名为...的测试类...

final class TagNewsTests: XCTestCase 

在你的 func test() 方法中以这种方式加载包...

let url = Bundle(for: TagNewsTests.self).url(forResource: "testJson1", withExtension: "json")

【讨论】:

【参考方案3】:

对我有用的是:

let url = Bundle.main.url(forResource: "data", withExtension: ".json") guard let dataURL = url, let data = try? Data(contentsOf: dataURL) else fatalError("Couldn't read data.json file")

不同之处在于我用.json而不是json标记了扩展

【讨论】:

如果您的 JSON 文件在您的“测试”项目中作为支持文件,则 Bundle.main.url 将不起作用。

以上是关于如何在 Xcode 中加载本地 json 文件以进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Flutter 中加载本地 JSON 文件

在 react native 0.60.3 和 Xcode 11 中加载本地图像

在一个活动中加载单个片段两次,从本地json文件中加载2个问题

如何在 Flutter Mobile App 中加载和查询本地 json 数据

我想在 html 中加载一个 json 脚本(本地),用作表格

如何在 Swift 中加载远程 JSON 文件?