测试自定义TableViewCell的内容

时间:2016-04-19 15:38:08

标签: ios swift uitableview

我正在使用Swift 2构建一个iOS应用程序,该应用程序使用自定义表格视图单元格,附加标签,图像视图等(让我们调用类CustomTableViewCell)。我已经将类 - 故事板连接到每个子视图并为该单元分配了一个标识符。我已经模拟了数据,并试图运行应用程序来检查单元格是否正确映射,看起来没问题。

问题在于我无法将出列的单元格视为CustomTableViewCell来测试其属性的值。当我向下转换从tableView(tableView, cellForRowAtIndexPath: indexPath)返回的单元格时,所有自定义属性值都变为nil,我的测试失败。

这是我的代码:

MyViewControllerTests.swift

  func testShouldConfigureTableViewCellToDisplayNotification() {
    // Given
    sut.tableView = TableViewSpy()

    let items = [ <some items to display> ]
    sut.displayedItems = items

    // When
    let indexPath = NSIndexPath(forRow: 0, inSection: 0)
    let cell = viewController.tableView(viewController.tableView, cellForRowAtIndexPath: indexPath) as! CustomTableViewCell

    // Then
    XCTAssertEqual(cell.detailLabel?.text, "foo", "A properly configured table view cell should display the notification detail")
    XCTAssertEqual(cell.titleLabel?.text, "Bar", "A properly configured table view cell should display the notification title")
    XCTAssertEqual(cell.dateLabel?.text, "15/04/2016", "A properly configured table view cell should display the notification date")
  }

MyViewController.swift

  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellIdentifier = "CustomTableViewCell"
    let displayedItem = displayedItems[indexPath.row]
    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? CustomTableViewCell
    if cell == nil {
      cell = CustomTableViewCell(style: .Value1, reuseIdentifier: cellIdentifier)
    }
    cell!.dateLabel?.text = displayedItem.date
    cell!.detailLabel?.text = displayedItem.detail
    cell!.titleLabel?.text = displayedItem.title
    return cell!
  }

CustomTableViewCell.swift

class CustomTableViewCell: UITableViewCell {
  // MARK: Properties
  @IBOutlet weak var dateLabel: UILabel!
  @IBOutlet weak var detailLabel: UILabel!
  @IBOutlet weak var titleLabel: UILabel!  

  override func awakeFromNib() {
    super.awakeFromNib()
      // Initialization code
  }

  override func setSelected(selected: Bool, animated: Bool) {
      super.setSelected(selected, animated: animated)

      // Configure the view for the selected state
  }

}

2 个答案:

答案 0 :(得分:0)

尝试替换

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellIdentifier = "CustomTableViewCell"
    let displayedItem = displayedItems[indexPath.row]
    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? CustomTableViewCell
    if cell == nil {
      cell = CustomTableViewCell(style: .Value1, reuseIdentifier: cellIdentifier)
    }
    cell!.dateLabel?.text = displayedItem.date
    cell!.detailLabel?.text = displayedItem.detail
    cell!.titleLabel?.text = displayedItem.title
    return cell!
  }

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellIdentifier = "CustomTableViewCell"
    let displayedItem = displayedItems[indexPath.row]
    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! CustomTableViewCell
    cell.dateLabel.text = displayedItem.date
    cell.detailLabel.text = displayedItem.detail
    cell.titleLabel.text = displayedItem.title
    return cell
  }

如果您在故事板中正确连接了您的单元格,那么这应该可行。否则,请检查您是否为您的单元格正确分配了所有IBOutlet。

如果某些内容无效,请检查以下内容:

1)在故事板中选择您的单元格。

2)在右栏中打开Identity Inspector(顶部的第3个标签)。确保单元格的类设置为CustomTableViewCell

3)在“属性检查器”(第4个选项卡)中,确保单元格标识符拼写正确。

4)在Connections检查器(最后一个选项卡)中,分配已定义的单元格的所有IBOutlet。

答案 1 :(得分:0)

从您的代码示例看起来您没有注册您的单元格以便重复使用。

tableView.registerClass(CustomTableViewCell.self, forCellReuseIdentifier: "CustomTableViewCell")