Чтение локального файла JSON в XCUITest

Я пишу тесты пользовательского интерфейса для приложения iOS. Я хочу прочитать данные из локального файла json.

Я использую следующий код, чтобы получить путь к моему json-файлу:

func testExample() {

    readJSON()
}

func readJSON(){
    let bundle = Bundle(for:myTestClass.self)
    if let path = bundle.url(forResource: "myurl", withExtension: "json"){
        print("Got the path")
        print(path)
    }
    else{
        print("Invalid filename/path")
    }

Я попытался использовать решение для следующего вопроса stackoverflow: Чтение в файле JSON с использованием Свифт. Не работает!

Кроме того, я просмотрел следующую документацию Apple: https://developer.apple.com/swift/blog/?id=37

Любая помощь будет принята с благодарностью!


person Kushal Jogi    schedule 17.02.2017    source источник
comment
ваш json хранится в локальном каталоге или он прикреплен к Xcode?   -  person KrishnaCA    schedule 18.02.2017


Ответы (3)


Прежде всего, вам нужно проверить, что файл .json находится в той же цели, что и тестовый файл. Если файл находится в основной цели, вы должны использовать Bundle.main. Однако, если он находится в той же цели, что и ваш тест, используйте приведенный ниже код.

let t = type(of: self)
let bundle = Bundle(for: t.self)
let path = bundle.path(forResource: "myurl", ofType: "json")
person Ryan    schedule 31.01.2018

Это не то, как вы читаете локальные файлы json из Bundle в iOS. Это делается следующим образом:

// "myUrl" is assumed to be your json file name 

if let pathStr: String = Bundle.main.path(forResource: "myurl", ofType: ".json") {
    print("json path: \(pathStr)")
}
person KrishnaCA    schedule 18.02.2017
comment
Именно так мы читаем локальный файл json в тестовом пакете пользовательского интерфейса. - person Kushal Jogi; 20.02.2017
comment
@KushalJogi, в чем проблема? Это не работает? Могу я узнать - person KrishnaCA; 20.02.2017
comment
Это не сработает, потому что основной пакет не тот, о котором вы думаете, это пакет тестового запуска, и я предполагаю, что у вас нет этого json. - person Julian; 26.01.2018
comment
@JulianKról, спасибо за информацию. Пожалуйста, напишите это как ответ ниже с образцом кода, если это возможно. - person KrishnaCA; 26.01.2018

Я только что обнаружил, что ресурсы, добавленные в цели XCUITest, будут помещены в Bundle.main.resourcePath + "/PlugIns/<TARGET_NAME>.xctest/". Однако я не уверен, что есть лучшие способы доступа к ним, а не жесткое кодирование пути к подкаталогу.

person Victor Lee    schedule 17.07.2018