在模拟API响应时,如何在单元测试中使用JSON文件

问题描述 投票:0回答:1

我想加载一个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

ios swift unit-testing xctest
1个回答
2
投票

我在测试中做了类似的事情,在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
}
© www.soinside.com 2019 - 2024. All rights reserved.