代码之家  ›  专栏  ›  技术社区  ›  Colin Barrett

如何在生成时测试uiviewcontrollers?

  •  6
  • Colin Barrett  · 技术社区  · 15 年前

    我非常相信测试,但不是一个很好的从业者。我已经很好地覆盖了我的模型对象,并以TDD风格对它们进行编程。我真的很喜欢它,我想把它扩展到我的控制器层,特别是我的 UIViewController 子类。

    不幸的是,许多uikit类在独立测试中不起作用。但是,我不满意仅在设备上运行依赖测试的限制。在每次构建之前运行所有单元测试对我来说非常重要,在我看来,它是可能的,并且对单元测试(与其他类型的测试相反)控制器代码来说是值得的。

    我的问题很简单:我如何测试 ui视图控制器 以这样的方式在每次构建之前运行测试?我知道这个问题有几个不同的解决方案,但对每个解决方案的各种好处不太了解。

    4 回复  |  直到 13 年前
        1
  •  2
  •   danielpunkass    15 年前

    一般来说,如果你陷入了一个环境问题,而无条件测试似乎是不可能的,你可以解决它,如果好处是伟大的足以保证你跳过一些箍。

    这里的情况是不需要的外部依赖性的一个特殊情况,我通常在单元测试中通过定义依赖代码的小部分来解决,或者通过实现存根类来填充预期的依赖性角色,从而可以测试我的代码。

    因此,在这种特定的情况下,您可以创建一个新的源文件,只在测试包中链接,称为“uikitstubclasses.m”_在其中,您可以实现模拟uikit依赖类(如uiviewcontroller)的基本需求,这样您的测试就可以链接并彻底地执行自己的逻辑。

    重要的是要记住,这通常不一定是所有的工作。测试将让您知道需要在存根中实现什么,例如,通过发出关于未实现方法的异常。您只需添加所需的内容来消除错误并测试代码,然后存根类就足够了。 用于测试 就像任何合法的系统框架类一样。

        2
  •  2
  •   Ed Voas    15 年前

    你不能在克里斯·汉森的博客中使用这些技巧/方法吗? http://chanson.livejournal.com/120263.html

    看起来你可能需要运行你的应用程序作为测试工具,但它似乎可行。仅仅因为你在运行“应用程序”,并不意味着它必须做你的应用程序所做的正常的事情。或者,您可以创建另一个应用程序目标,它只是一个简单的虚拟应用程序,将加载并运行测试包。

    我同意这可能不是完美的,但听起来可能有效,而且似乎可以自动化。

        3
  •  2
  •   Colin Barrett    15 年前

    所以我对目前的情况不满意,丹尼尔和埃德的回答激励我进一步改进。我决定亲自处理此事。

    我最后写的是一个小型的CocoaTouch应用程序,它在-applicationDidFinishing中扫描类层次结构中的任何SentestCase子类并运行它们。与GoogleToolkBoxFormac的单元测试工具不同,我尝试尽可能多地使用内置的感知机器,结果它并没有真正的代码那么多。除了验证uilabel在不破坏测试平台的情况下进行分配之外,我没有做过太多的测试(如果您尝试,otest实际上会崩溃),但它应该可以工作。

    我把这两个来源都放到网上了 Bitbucket Github .

        4
  •  1
  •   logancautrell    13 年前

    虽然苹果的工具已经随着时间的推移而改进,但它们仍然有很多需要改进的地方。ghUnit更好,有一个真正的测试运行程序,并且使设置断点变得非常简单,等等。您甚至可以利用所有现有的语句。

    Get it on github.

    您可以毫不担心地实例化所有uikit代码。我使用它来测试uiviewcontroller、断言出口和进行行为测试。