Как я могу использовать файл JSON в модульном тесте при насмешке ответа API - PullRequest
0 голосов
/ 26 января 2019

Я хотел бы загрузить файл 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

1 Ответ

0 голосов
/ 26 января 2019

Я делаю что-то подобное в своих тестах с расширением на 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
}
...