iOS - 测试用户界面(自动布局/布局约束)

时间:2013-04-23 22:39:33

标签: unit-testing user-interface ios6 autolayout

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

我的视图控制器子类正在显示"叶级"数据 - 例如,让我们说应用程序目录DVD和这个视图控制器是DiscDetailViewController,你传递一个DigitalDisc实例,它有五个字符串属性。目标是在标签中显示这些字符串,并使用适当的NSLayoutConstraint正确地传递所有内容。

我想编写一系列测试,这些测试可以将DigitalDisc个实例传递给此视图控制器,并确保我已经定义了足够的约束。

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

我的测试动机是抵御回归错误。自动布局(特别是在IB中)是变幻无常的,但这似乎并不是自动布局所独有的。我不想修复一个错误只是为了级联一堆新的失败。这些单元测试?他们是UIAutomation测试吗?它们完全是别的吗?

----- ----- EDIT

让我们说我的DigitalDisc类定义如下:

@interface DigitalDisc : NSObject

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

@end

我想检查以确保我的布局约束足够灵活,以允许DigitalDisc实例在任何字段中都没有值;唯一的要求是title字段。这意味着删除子视图应该正确地流动接口。我的意思是"正确吗?"

  1. 没有歧义和不可满足的约束(我可以测试-hasAmbigiousLayout的UIView但是如何测试抛出并捕获的异常?)
  2. 标签扩展为多行以避免截断
  3. 相邻标签永远不会比标准距离更近或更远
  4. 以上在肖像和风景中都是如此
  5. (这足以让我陷入兔子洞,所以我可以考虑满足其他一些要求)


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

    视图控制器中的完全填充的DigitalDisc实例是什么样子 A fully filled in <code>DigitalDisc</code>

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

    注意&#34;年&#34;上面的屏幕截图中的标签已被删除,并且&#34;导演&#34;标签已经向上移动。这是我对测试非常感兴趣的规范/行为类型。

    A <code>DigitalDisc</code> with only title and director

1 个答案:

答案 0 :(得分:0)

我可能误解了你的问题,但是你描述它的方式我会考虑使用表视图或集合视图。假设您使用集合视图,数据源将知道在给定DigitalDisc时需要显示多少个单元格和哪些属性。在没有启动界面的情况下,这很容易进行单元测试。然后,自定义集合视图布局可以确保每个单元格是适当的高度(标签中给定的文本长度)和与其他单元格的适当距离。这也可以单元测试。

然后,您可以连接您的集合视图数据源和自定义集合视图布局并完成。如果需要,可以做一些UI自动化测试以进行健全性检查。但我会尝试推动边缘案例测试,就像你描述的那些不接触界面的低级别测试一样。 Apple已经鼓励使用集合查看数据源和布局的分离听起来像是一个分解问题的好方法,因此您可以对其进行全面测试。

是的,您可以尝试使用自动布局执行您想要的操作,但无论如何,您必须计算标签的高度,并且每次都会旋转UI,这会很慢。