我正在寻找有关如何测试利用布局约束的用户界面的最佳实践、建议和见解。
我的视图控制器子类正在显示“叶级”数据——例如,假设应用程序目录 DVD 和这个视图控制器是DiscDetailViewController
,你传递给它一个DigitalDisc
具有五个字符串属性的实例。目标是在标签中显示这些字符串,并使用适当NSLayoutConstraint
的 .
我想编写一系列测试,对DigitalDisc
传递到此视图控制器的实例进行尽可能多的合理排列,并确保我已经定义了足够的约束。
例如,我有一个DigitalDisc
实例,设置它的title
和director
属性并在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
字段。这意味着删除子视图应该正确地流向界面。我所说的“正确”是什么意思?
- 没有模棱两可和不可满足的约束(我可以测试 UIView
-hasAmbigiousLayout
但如何测试抛出和捕获的异常?) - 该标签扩展到多行以避免截断
- 相邻标签永远不会比标准距离更近或更远
- 以上在纵向和横向都是正确的
(这足以让我陷入困境,所以我可以考虑满足其他一些要求)
以下是一些肯定会赢得下一个 ADA 的模拟屏幕
完全填充的DigitalDisc
实例在视图控制器中的样子
部分填充的DigitalDisc
实例在视图控制器中可能是什么样子。
请注意,上面屏幕截图中的“年份”标签已被删除,“导演”标签已向上移动。这是我对测试非常感兴趣的规范/行为类型。