Rob*_*ins 5 unit-testing objective-c ios ocmockito
假设我正在为tableView:cellForRowAtIndexPath:视图控制器上的委托方法编写单元测试。根据我传入的索引路径,此方法可以返回几个不同的单元配置。
我可以轻松地断言该cell.textLabel.text属性。但是,如何断言该cell.imageView.image属性包含正确的图像?图像或imageView都不具有(公共API)属性,我可以使用这些属性来查找图像名称或文件名。
我想出的最好办法是创建最小的有效.png(使用它,[UIImage imageWithData:]以便在单元测试中不要碰到磁盘),并断言从中获得的字节数组cell.imageView.image是我期望的字节数组。我创建了一个OCHamcrest匹配器,以使其变得更好一点,但这是一种不令人满意且不灵活的方法。
有谁有更好的主意?
如果您正在使用[UIImage imagedNamed:],则图像会被缓存。从摘录的UIImage类的引用为imagedNamed::
此方法在系统缓存中查找具有指定名称的图像对象,如果存在则返回该对象。如果缓存中还没有匹配的图像对象,则此方法从指定文件加载图像数据,将其缓存,然后返回结果对象。
这意味着您可以断言,cell.imageView.image == [UIImage imagedName:@"my_image"]因为这是一个指针比较,并且由于图像被缓存,多个imageNamed:具有相同名称的调用将返回相同的指针。即使内存紧张,您仍然应该没问题,正如 UIImage 类参考所解释的那样:
在内存不足的情况下,可能会从 UIImage 对象中清除图像数据以释放系统内存。这种清除行为仅影响 UIImage 对象内部存储的图像数据,而不影响对象本身。
| 归档时间: |
|
| 查看次数: |
2000 次 |
| 最近记录: |