我有簡單的ListView需要顯示來自網絡層的記錄。 (應用程序的第一個屏幕)用於集成n/w層的iOS Swift設計
我需要了解哪些是正確的流程,以便我可以輕鬆地製作單元測試用例。 (無VIPER架構)
NetworkMgr進行網絡調用並創建Model對象。
這些Model對象需要在ListTableView中填充。
我有一個完成處理程序方法來調用給出模型對象的網絡請求。
func getData() {
dataMgr.requestData(url: "String") { (EmployeesArray, error) in
// print(error)
}
}
現在的問題是 - 對於單元測試時,我調用ListDataTest因爲ListVC是在故事板上加載時查看viewDidLoad方法調用,這將啓動網絡邏輯。
所以我不能僅測試UI相關的東西。
我試圖在ListDataTest類中創建一些擴展,但沒有實現成功。
下面是控制器的流程: -
===
class ListVC: UIViewController {
var dataProvider: ListData
override func viewDidLoad() {
super.viewDidLoad()
dataProvider.viewLoaded()
}
}
======= 在ListData類
protocol DatProviderLoad {
func viewLoaded()
}
class ListData: NSObject {
}
extension ListData : DatProviderLoad {
func viewLoaded() {
print("loaded")
//the network calls goes here
}
}
/- 試驗類
class ListDataProviderTest: XCTestCase {
var sut: ListData!
var controller: ListVC!
override func setUp() {
super.setUp()
sut = ListData()
let storyBoard = UIStoryboard(name:"Main", bundle: nil)
controller = storyBoard.instantiateViewController(withIdentifier: "ListVC") as! ListVC
controller.dataProvider = sut //before this called the storyboard already called the viewdidload once
_ = controller.view
}
}
您的反饋將會非常有幫助。
任何提示或教程正確的方向將是非常可觀的。
所以如果ViewMgr有getData方法。所以當應用程序。開始啓動getData調用的人員。我假設ViewMgr refr。應該存在於ViewCtr中。 – Ekra
@Ekra:首選的方法是創建一個協議,並且ViewController將引用符合該協議的對象。這樣你抽象ViewManager類,但是你是正確的ViewController將有參考,並會告訴ViewManager類視圖加載。瞭解此之後,ViewManager可以啓動網絡獲取。 –
感謝您的回覆。我已經更新了我的問題,請查看它 – Ekra