2017-04-05 91 views
0

我有一個名爲「FFQuestions」的應用程序。我使用了一個名爲QA.json的本地json文件。在單元測試中使用本地JSON文件

有沒有什麼辦法可以在我的「FFQuestionsTests」文件夾文件中使用QA.json而不重建文件並將其放入該文件夾中?是否需要用我的代碼更改才能實現?還是像添加「FFQuestionsTests」的Target Membership一樣簡單?

這是我的加載QA.json方法...

func loadJSONFromFile() -> [String: Any]? { 
    guard let url = Bundle.main.url(forResource: "QA", withExtension: "json") else {return nil} 
    guard let data: Data = NSData(contentsOf: url) as Data? else {return nil} 

    do { 
     let object = try JSONSerialization.jsonObject(with: data, options: .allowFragments) 
     guard let dictionary = object as? [String: Any] else {return nil} 
     return dictionary 
    } catch { 
     print("Not parsed") 
    } 

    return nil 
} 

甚至認爲它可能需要在單元測試有所不同,所以我嘗試了做...

func loadJSONFromTestsFile() -> [String: Any]? { 
    let testBundle = Bundle(for: type(of: self)) 
    let url = testBundle.url(forResource: "QA", withExtension: "json") 

    guard let data: Data = NSData(contentsOf: url!) as Data? else {return nil} 

    do { 
     let object = try JSONSerialization.jsonObject(with: data, options: .allowFragments) 
     guard let dictionary = object as? [String: Any] else {return nil} 
     print(dictionary) 
     return dictionary 
    } catch { 
     print("Not parsed") 
    } 

    return nil 
} 

這就是我所嘗試的,但我仍然遇到了nil崩潰。

+0

你究竟在哪裏有這個'nil'崩潰?哪條線?什麼錯誤信息? –

回答

1

這就像爲「FFQuestionsTests」添加目標成員一樣簡單

+0

單元測試工作的代碼是第一個還是第二個? FFQuestionsTest的會員資格是什麼意思?在問題中,FFQuestionsTest被認爲是一個文件夾,而不是文件。 – Efren

+0

@Efren代碼是第一個和第二個,所有重要的是我檢查框添加目標成員。挺容易! – SRMR

+0

我只能做一個單元測試工作,類似於第二個代碼,第一個只適用於App代碼。我的問題是關於你說你檢查的目標,如果它只能在文件中完成,而不是文件中提到的文件夾,FFQuestionsTests是一個文件夾。也許更新問題來澄清。 – Efren