我花时间设置了一些单元测试并在 XCode 等中设置了目标,它们对一些类非常有用。然而:
我想测试我不想启动整个应用程序的小型 UI 片段。没有通过/失败的概念:我需要“查看”这些部分,并且我可以创建所有相关类的虚拟实例来执行此操作。我的问题是:如何在 XCode 中进行设置?
我意识到我可以为每个类(或类组)使用另一个 XCode 项目,但这似乎有点麻烦。每个人的另一个目标?
我花时间设置了一些单元测试并在 XCode 等中设置了目标,它们对一些类非常有用。然而:
我想测试我不想启动整个应用程序的小型 UI 片段。没有通过/失败的概念:我需要“查看”这些部分,并且我可以创建所有相关类的虚拟实例来执行此操作。我的问题是:如何在 XCode 中进行设置?
我意识到我可以为每个类(或类组)使用另一个 XCode 项目,但这似乎有点麻烦。每个人的另一个目标?
我知道您正在寻找一种不需要功能齐全的应用程序来测试 UI 组件的方法,但我对 iOS 4.0 中引入的新 UI 自动化工具可以让您做的事情印象深刻。
该工具允许您使用 Javascript 脚本以交互方式测试应用程序的界面,并且它不需要检查屏幕上的确切像素值或位置。它使用系统中存在的内置辅助功能挂钩,以便 VoiceOver 识别组件并与之交互。
使用这个工具,我已经能够编写测试脚本,在用户与其交互时充分锻炼我的应用程序,以及那些在特定区域进行锤击并寻找细微内存积累的测试。
Instruments 这一部分的文档有点稀少,但我最近教了一门课程,涵盖了该主题的视频,iTunes U上可以免费提供视频(查找秋季学期的测试课程)。我的课程笔记(VoodooPad 格式)也涵盖了这一点。我还强烈推荐观看WWDC 2010 视频会话 306 - “使用仪器自动化用户界面测试”。
好吧,即使该 GUI 是大型应用程序的一部分,您也不能将显示某个 GUI 的一部分称为测试。您可以在这里做的是创建一个单独的可执行目标并编写一个小工具,该工具可以重用应用程序中的 GUI 组件并根据输入参数向您显示它们。这将消除对许多不同目标的需求。
如果您仍然坚持使用单元测试,您可以显示您的 GUI 一段时间,例如 10 秒。因此,测试用例将一直运行,直到 GUI 关闭或超时结束,每个测试最多需要 N 秒才能执行。
这是一个很好的问题。我认为您实际上不想对那些“视觉确认”使用单元测试。就我个人而言,我通常编写小测试应用程序来进行此类测试或开发。我不喜欢同一个项目中的单独目标,所以我通常只在原始项目旁边创建一个测试项目,然后使用相对路径引用这些类和资源。少杂乱。能够在他们自己的小测试环境中测试更复杂的用户界面元素真是太好了。
我会对 UI“单元测试”采取两级方法:
尽管 Cocoa/CocoaTouch 仍然比 Model-View-ViewModel 范式更接近于 Model-View-Controller,但您可以通过将“视图”分解为“视图模型”和“演示者”视图来获得很多可测试性优势(请注意,这有点类似于 NSView/NSCell 对;Cocoa 工程师很久以前就有了这个)。如果视图是一个简单的表示层,那么您可以通过单元测试“视图模型”来测试视图的行为。
要测试视图的绘制/渲染,您必须进行人工测试或进行基于渲染/像素的测试。Google 的 Mac 工具箱有几个工具可以对渲染的 NSView、CALayers、UIView 等进行逐像素比较。我为 Core Plot 项目编写了一个工具来处理测试失败并将参考文件合并回你的单元测试包更容易一些。