问题:
我用3个Dummy项加载了collectionView。然而Cell回来了,是不是因为视图从未加载过?你们如何测试你的collectionViewCell类型?
代码
var window: UIWindow?
var sut: QuestsDataProvider!
var collectionView: UICollectionView!
override func setUp() {
super.setUp()
bulletinController = BulletinController(collectionViewLayout: UICollectionViewFlowLayout())
sut = QuestsDataProvider(acceptedQuests: false, completedQuests: false)
bulletinController.collectionView?.dataSource = sut
bulletinController.collectionView?.delegate = sut
window = UIWindow()
window?.makeKeyAndVisible()
window?.rootViewController = bulletinController
}
func testCellIsQuestCell() {
let indexPath = IndexPath(item: 1, section: 0)
let cell = collectionView.cellForItem(at: indexPath)
guard let count = sut.questManager?.quests.count else {return XCTFail()}
XCTAssertTrue(cell is QuestCell)
}
编辑:
经过进一步测试,我能够在模拟器中看到虚拟Cell,并从numberOfitems(InSection: Int)
获得准确的计数。但是我没有可见的细胞。
第二次编辑:
经过进一步研究,我发现问题是collectionView.cellForItem(at: indexPath)
只显示可见细胞。单元测试集合视图单元类型是否有其他方法?
答案 0 :(得分:1)
您需要先访问视图控制器的视图对象,然后才能完全初始化它的子视图组件。
您应该可以在设置功能中执行let _ = bulletinController.view
。这是一种非常常见的方法,请参阅here
以下相关部分
func setupCreateOrderViewController()
{
let bundle = NSBundle(forClass: self.dynamicType)
let storyboard = UIStoryboard(name: "Main", bundle: bundle)
createOrderViewController = storyboard.instantiateViewControllerWithIdentifier("CreateOrderViewController") as! CreateOrderViewController
_ = createOrderViewController.view
}
引用链接:
但是最后一行发生了两件非常非常重要的事情:
编辑:
您也可以在视图控制器上调用loadViewIfNeeded()
,这将执行相同的操作。
加载视图控制器的视图(如果尚未加载)。