在模拟API响应时,如何在单元测试中使用JSON文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在模拟API响应时,如何在单元测试中使用JSON文件相关的知识,希望对你有一定的参考价值。
我想加载一个JSON文件并将其转换为数据作为我的单元测试的一部分。
这样我可以断言我的服务如何处理响应,但是我不想用大量的json块填充每个测试用例。我希望将文件保存在与测试用例相同的目录中,但是由于无法找到该文件,因此尝试运行测试会引发异常。
func test_ViewDidLoad_CallsContentService() {
let contentExpectation = expectation(description: "FetchContentEntry")
let httpClient = HTTPClient()
let response = createURLResponse(forUrl: "https://foo.bar", withStatusCode: 200)
httpClient.session = MockURLSession(data: mockContentData, urlResponse: response, error: nil)
.....
}
我的文件被引用为
extension ContentSceneTests {
.........
var mockContentData: Data {
let data = try! Data(contentsOf: URL(fileURLWithPath: "./ContentResponse.json"), options: .alwaysMapped)
return data
}
}
文件彼此相邻,例如
ContentSceneTests.swift
ContentResponse.json
答案
我在测试中做了类似的事情,在XCTestCase
上有一个扩展名。
你应该可以使用
var mockContentData: Data {
return getData(name: "ContentResponse")
}
func getData(name: String, withExtension: String = "json") -> Data {
let bundle = Bundle(for: type(of: self))
let fileUrl = bundle.url(forResource: name, withExtension: withExtension)
let data = try! Data(contentsOf: fileUrl!)
return data
}
以上是关于在模拟API响应时,如何在单元测试中使用JSON文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring 在单元测试中模拟远程 REST API?
在 Angular 11 中进行单元测试时,将 json 对象转换为 typescript 接口导致模拟对象出错
Angular 6 - 如何在单元测试中模拟 router.events url 响应