代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

单元测试很棒,但是

  •  10
  • Dan Rosenstark  · 技术社区  · 14 年前

    我花了些时间设置了一些单元测试,并在Xcode等语言中设置了目标,它们对于一些类非常有用。然而:

    我想测试一些小的UI部件 不想启动整个应用程序。 没有“通过/失败”的概念:我需要“看到”这些片段,并且我可以创建所有相关类的虚拟实例来实现这一点。我的问题是: 如何在Xcode中设置?

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

    4 回复  |  直到 13 年前
        1
  •  5
  •   user405725    14 年前

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

    如果您仍然坚持使用单元测试,您可以在一段时间内显示您的GUI,例如10秒。因此,测试用例将一直运行到GUI关闭或超时结束,并且每个测试将花费N秒来执行。

        2
  •  12
  •   Brad Larson    14 年前

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

    此工具允许您使用JavaScript脚本交互测试应用程序的界面,并且它不需要检查屏幕上的确切像素值或位置。它使用系统中的内置可访问性钩子进行画外音识别,并与组件进行交互。

    使用这个工具,我已经能够编写测试脚本,以用户的身份充分地运行我的应用程序,以及那些在特定区域上重击并寻找细微内存积累的测试。

    关于这部分仪器的文档有点稀少,但我最近教了一个课程,涵盖视频的主题。 available on iTunes U 免费(在秋季学期找测试课)。我的 course notes (伏都教格式)也包括这个。我也强烈推荐观看 WWDC 2010 video 会话306-“自动化仪器用户界面测试”。

        3
  •  2
  •   Stefan Arentz    14 年前

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

        4
  •  2
  •   Barry Wark    14 年前

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

    1. 尽管cocoa/cocoatouch仍然比模型视图视图模型范式更接近模型视图控制器,但是通过将“视图”分为“视图模型”和“演示者”视图,可以获得许多可测试性优势(请注意,这在一定程度上与nsview/nscell对一致;cocOA工程师很久以前就有过这个)。如果视图是一个简单的表示层,则可以测试 行为 逐单元测试“视图模型”的视图。

    2. 要测试视图的绘制/渲染,您必须进行人工测试或基于渲染/像素的测试。 Google's Toolbox for Mac 有几个工具可以对渲染的nsview、calayers、uiview等进行逐像素比较。 tool 对于core plot项目,要处理测试失败并将参考文件合并回单元测试包A 小的 更容易的。