0

我正在寻找有关如何测试利用布局约束的用户界面的最佳实践、建议和见解。

我的视图控制器子类正在显示“叶级”数据——例如,假设应用程序目录 DVD 和这个视图控制器是DiscDetailViewController,你传递给它一个DigitalDisc具有五个字符串属性的实例。目标是在标签中显示这些字符串,并使用适当NSLayoutConstraint的 .

我想编写一系列测试,对DigitalDisc传递到此视图控制器的实例进行尽可能多的合理排列,并确保我已经定义了足够的约束。

例如,我有一个DigitalDisc实例,设置它的titledirector属性并在DiscDetailViewController... Ack!我要断言什么?我被困住了!

我进行测试的动机是避免回归错误。自动布局(尤其是在 IB 中)变化无常,但这似乎并不是自动布局所独有的。我不想修复一个错误只是为了级联一堆新的故障。这些是单元测试吗?他们是 UIAutomation 测试吗?它们完全是另外一回事吗?

- - -编辑 - - -

假设我的DigitalDisc类定义如下:

@interface DigitalDisc : NSObject

@property NSString *title;
@property NSString *year;
@property NSString *director;
@property NSString *studio;
@property NSString *review;

@end

我想检查以确保我的布局约束足够灵活,以允许DigitalDisc在任何字段中可能没有值的实例;唯一的要求是title字段。这意味着删除子视图应该正确地流向界面。我所说的“正确”是什么意思?

  1. 没有模棱两可和不可满足的约束(我可以测试 UIView-hasAmbigiousLayout但如何测试抛出和捕获的异常?)
  2. 该标签扩展到多行以避免截断
  3. 相邻标签永远不会比标准距离更近或更远
  4. 以上在纵向和横向都是正确的

(这足以让我陷入困境,所以我可以考虑满足其他一些要求)


以下是一些肯定会赢得下一个 ADA 的模拟屏幕

完全填充的DigitalDisc实例在视图控制器中的样子 一张完整的 <code>DigitalDisc</code>

部分填充的DigitalDisc实例在视图控制器中可能是什么样子。

请注意,上面屏幕截图中的“年份”标签已被删除,“导演”标签已向上移动。这是我对测试非常感兴趣的规范/行为类型。

只有标题和导演的<code>DigitalDisc</code>

4

1 回答 1

0

我可能误解了你的问题,但你描述的方式我会考虑使用表格视图或集合视图。假设您使用集合视图,数据源将知道在给定DigitalDisc. 这很容易进行单元测试,而无需启动接口。然后,自定义集合视图布局可以确保每个单元格具有适当的高度(给定标签中的文本长度)以及与其他单元格的适当距离。这也是可单元测试的。

然后,您只需连接您的集合视图数据源和自定义集合视图布局即可完成。如果需要,可能会做一些 UI 自动化测试以进行健全性检查。但是我会尝试将您描述的边缘案例测试推向不接触界面的较低级别的测试。Apple 已经鼓励使用集合视图数据源和布局进行分离,这听起来像是解决问题的好方法,以便您可以彻底测试它。

是的,您可以尝试使用自动布局来做您想做的事情,但是无论如何您都必须计算标签的高度,而且您每次都会旋转 UI,这会很慢。

于 2013-04-24T01:53:30.243 回答