单元测试很精彩,但是

时间:2010-09-30 20:46:57

标签: iphone ios xcode ios-ui-automation

我花时间设置一些单元测试并在XCode等中设置目标,它们对于几个类非常有用。但是:

我想测试我不想启动整个应用程序的小UI部分。没有传递/失败的概念:我需要“看到”这些部分,而我可以使所有相关类的虚拟实例执行此操作。我的问题是:如何在XCode中设置它?

我意识到我可以为每个类(或类组)使用另一个XCode项目,但这看起来有点麻烦。每个的另一个目标?

4 个答案:

答案 0 :(得分:12)

我知道您正在寻找一种测试不需要功能齐全的应用程序的UI组件的方法,但我对iOS 4.0中引入的新UI自动化工具让您印象深刻。

此工具允许您使用Javascript脚本以交互方式测试应用程序的界面,并且这样做的方式不需要检查屏幕上的确切像素值或位置。它使用系统中存在的内置辅助功能挂钩,用于VoiceOver识别组件并与组件交互。

使用这个工具,我已经能够编写完全运用我的应用程序的测试脚本,因为用户可以与它进行交互,以及那些在特定区域进行锤击并寻找微妙内存构建的应用程序。

关于这部分乐器的文档有点稀疏,但我最近教了一个课程,涵盖了视频available on iTunes U免费的主题(在秋季学期寻找测试课)。我的course notes(采用VoodooPad格式)也涵盖了这一点。我还强烈建议您观看WWDC 2010 video会话306 - “使用乐器自动化用户界面测试”。

答案 1 :(得分:5)

好吧,即使GUI是大型应用程序的一部分,也无法调用显示一些GUI的测试。你可以在这里做的是创建一个单独的可执行目标,并编写一个小工具,重用应用程序中的GUI组件,并根据输入参数向您显示它们。这将消除对许多不同目标的需求。

如果仍然坚持使用单元测试,则可以在一段时间内显示GUI,例如10秒。因此,测试用例将一直运行,直到GUI关闭或超时结束,每次测试最多需要N秒才能执行。

答案 2 :(得分:2)

这是一个很好的问题。我认为你实际上不想对那些“视觉确认”使用单元测试。就个人而言,我通常会编写一些测试应用程序来进行此类测试或开发。我不喜欢同一项目中的单独目标,所以我通常只是在原始项目旁边创建一个测试项目,然后使用相对路径引用这些类和资源。减少混乱。能够在他们自己的小测试环境中测试更复杂的用户界面元素真的很棒。

答案 3 :(得分:2)

我会采用两级方法进行UI“单元测试”:

  1. 尽管Cocoa / CocoaTouch仍然比Model-View-ViewModel范例更接近模型 - 视图 - 控制器,但您可以通过将“视图”分解为“视图模型”来获得大部分可测试性优势,一个“演示者”视图(请注意,这有点像NSView / NSCell对; Cocoa工程师很久以前就有过这个视图)。如果视图是一个简单的表示层,那么您可以通过单元测试“视图模型”来测试视图的行为

  2. 要测试视图的绘制/渲染,您必须进行人体测试或进行渲染/基于像素的测试。 Google's Toolbox for Mac有几个工具可以对渲染的NSView,CALayers,UIViews等进行逐像素比较。我为Core Plot项目写了tool来处理测试失败和合并参考文件更容易回到单元测试包 little