Cos*_*ows 6 xcode ios xctest swift
以下行崩溃了该程序:
let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell
Run Code Online (Sandbox Code Playgroud)
控制台日志显示以下错误:
"caught "NSInternalInconsistencyException", "request for rect at invalid index path (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0})"
Run Code Online (Sandbox Code Playgroud)
这是我检查过的一些项目清单:
这是完整的代码:
import XCTest
@testable import ToDo
class ItemCellTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testSUT_HasNameLabel(){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("ItemListViewController") as! ItemListViewController
_=controller.view
let tableView = controller.tableView
tableView.dataSource = FakeDataSource()
let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell
XCTAssertNotNil(cell.titleLabel)
}
}
extension ItemCellTests{
class FakeDataSource: NSObject, UITableViewDataSource {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是ItemCell.swift代码:
import UIKit
class ItemCell: UITableViewCell {
@IBOutlet weak var titleLabel: UILabel!
func configCellWithItem(item: ToDoItem){
}
}
Run Code Online (Sandbox Code Playgroud)
绑定到故事板的所有属性都已连接.什么被忽视了?
das*_*dom 13
看起来这段代码来自我的书.这是本书中的一个已知错误.将测试方法更改为以下内容:
func testSUT_HasNameLabel(){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("ItemListViewController") as! ItemListViewController
_=controller.view
let tableView = controller.tableView
let dataProvider = FakeDataSource()
tableView.dataSource = dataProvider
let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell
XCTAssertNotNil(cell.titleLabel)
}
Run Code Online (Sandbox Code Playgroud)
然后,当您稍后重构该代码以将设置放入setUp方法时,将属性添加let dataProvider = FakeDataSource()到测试用例并将其设置为表视图(tableView.dataSource = dataProvider)的数据源setUp.
| 归档时间: |
|
| 查看次数: |
2462 次 |
| 最近记录: |