如何在 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 文件以进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章
在 react native 0.60.3 和 Xcode 11 中加载本地图像
在一个活动中加载单个片段两次,从本地json文件中加载2个问题
如何在 Flutter Mobile App 中加载和查询本地 json 数据