我正在使用故事板,并且在视图控制器中创建了出口.在视图加载中,我已经将委托和数据源设置为self.我试图为表视图出口编写单元测试,但实际上,它返回nil,尽管它存在..
以下是视图模型代码.
class CakeListViewModel: CakeListViewModelType {
weak private var delegate: CakeListViewType!
let service:Service!
private var cakes:[Cake]?
var itemCount: Int {
return cakes?.count ?? 0
}
init(delegate: CakeListViewType,
service:Service = ServiceImpl()) {
self.delegate = delegate
self.service = service
}
/*
this method connect calls rest API to get data
*/
func fetchCakes() {
let client = ServiceClient(baseUrl:EndPoints.baseUrl.rawValue, path:Path.cakeList.rawValue, params:"", method:"get")
service.fetchData(client:client, type:Cake.self) { [weak self] (result) in
switch result {
case .success(let result):
self?.cakes = result
DispatchQueue.main.async {
self?.delegate?.updateUI()
}
case .failure(_):
self?.cakes = nil
DispatchQueue.main.async {
self?.delegate?.showError()
}
}
}
}
}
这是我的测试代码..
class CakeViewModelTest: XCTestCase {
var mockService:MockService!
var viewModel:CakeListViewModel!
override func setUp() {
mockService = MockService()
let vc = CakeListViewController()
viewModel = CakeListViewModel(delegate:vc, service:mockService)
}
func testTableViewOutlet() {
let vc = CakeListViewController()
XCTAssertNotNil(vc.tableView)
}
}
以下是我的视图控制器代码.
class CakeListViewController: UIViewController {
@IBOutlet var tableView: UITableView!
var viewModel:CakeListViewModelType!
weak var coordinator: Coordinator?
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
title = "?CakeItApp?"
viewModel.fetchCakes()
}
}
以下是错误的屏幕截图.