【发布时间】:2010-10-07 10:37:05
【问题描述】:
我想为我的 Cocoa 程序的 GUI 编写一些测试。
对于 Cocoa 应用程序有什么好的 GUI 测试框架吗?我唯一找到的是Squish,2400 欧元的价格远远超出了我的预算……
有什么想法吗? 你如何测试你的 Cocoa GUI?
【问题讨论】:
标签: cocoa testing gui-testing
我想为我的 Cocoa 程序的 GUI 编写一些测试。
对于 Cocoa 应用程序有什么好的 GUI 测试框架吗?我唯一找到的是Squish,2400 欧元的价格远远超出了我的预算……
有什么想法吗? 你如何测试你的 Cocoa GUI?
【问题讨论】:
标签: cocoa testing gui-testing
这取决于您所说的“测试 Cocoa GUI”是什么意思。
如果您想要 MPW 中包含的旧 Virtual User 等工具,那么这些工具很少见;你会看到像 Squish 和 Eggplant 这样的工具。
如果您想为应用程序的人机界面编写单元测试,我建议您遵循“trust, but verify”的方法,只要您信任重新建立正确的连接(根据您的框架),您的用户可以与您的框架正确交互。这意味着您可以通过验证您的模型和控制器代码正确连接到您的视图来完成大部分测试。
在我的博客上,我写了几个关于如何专门使用 Cocoa 执行此操作的示例,一个用于testing user interfaces built with target-action,一个用于testing user interfaces built with Cocoa bindings。 (当然,请记住,这两种技术并不是独占的:如果您想在通过 Cocoa 绑定管理的表视图中进行拖放操作,您还需要一个数据源,并且可能还有一个通过 target-action 连接的委托.)
我不编写单元测试的东西——通常——是它们的父视图中控件的定位或类型。但是,有时这对于获取和保持正确很重要;在这种情况下,我可以只查询控件的适当属性并使用标准断言验证它们。
我几乎从不会编写代码来“模拟事件”。我最接近的方法是构造一个虚假的拖动信息对象并将其传递给大纲视图数据源,以确保它能够正确处理拖动。
【讨论】:
我建议您看看 Google 的 Toolbox for Macintosh。除了其他一些不错的东西之外,它还为 NSView 和 CALayers 添加了一组非常不错的状态和渲染测试。在您的单元测试中,您断言视图/图层状态或渲染图像与保存的(按名称)模板匹配。如果模板在测试包中不存在或与保存的版本不匹配,则会生成新的编码状态或呈现的 TIFF 以供查看。 GTM 为 NSView 和 CALayer 提供了类别来进行状态编码和渲染。显然,您可以在自己的 NSView 或 CALayer 子类上覆盖这些类别,以编码相关状态(使用 NSCoder 协议)或渲染。
它还允许您(轻松)以编程方式发送关键事件并通过单元测试运行运行循环,并且它支持在 OS X 和 iPhone 上进行单元测试。
【讨论】:
我创建了一个开源 Python 包,它使用 Apple Accessibility API 等创建经典的 GUI 自动化库,让您可以看到 Cocoa GUI 并与之交互。 PyATOM home page
【讨论】:
您可以通过 http://www.testplant.com/ 查看并考虑 TestPlant(原 Redstone Software)的 Eggplant。
Here 是 Apple 去年发表的一篇文章。
【讨论】:
最新的 CocoaCast 播客采访了“使用 Ruby 进行脚本式 GUI 测试”的作者 Ian Dees。您可以通过CocoaCast了解更多信息
【讨论】: