我已经阅读了很多关于测试驱动开发的资料,并决定在一个小项目中试一试。作为引用,我目前正在阅读“在测试的指导下开发面向对象的软件”。
我了解如何对我的应用程序进行单元测试以及如何对 UI 的某些部分进行单元测试,但我很难设置端到端测试。例如,测试通过我的整个应用程序的特定路径是否产生正确的输出(这是我对端到端测试的基本理解)。
模拟点击事件不是必需的,但是与UI有某种联系是必要的。
我是否认为我需要组合“逻辑”测试(在不启动应用程序的情况下进行测试)、“应用程序”测试(在启动应用程序的情况下进行测试)和类似 GHUnit 的异步功能来完成此任务?
编辑:
阅读下面的一些答案后,听起来我正在寻找功能性的端到端测试,但我认为我应该给出一个我想象中的测试示例。
- 启动应用程序。
- 使用测试用户凭据调用登录函数。 (注意:不一定需要 UI 自动化)。
- 确认窗口上的标签显示“正在登录...”。
- 成功验证用户后,验证标签现在显示“欢迎,亚当!”。
KIF 听起来它可以工作,因为它有检查 UI 元素变化的步骤,而且看起来还有一个 Mac OSX 分支。我确信我也可以编写一个小类,它不断轮询 UI 以了解我预期的更改并在特定时间后超时,但我想知道这是否是正确的方法。
但是,也许我正在尝试将我在“通过测试引导开发面向对象的软件”中阅读的内容并尝试将其过于字面地应用于 Cocoa。
另一个更新:
所以到目前为止,我一直在阅读这些建议,检查链接到的各个地方并开始实现一些东西,同时仍然引用这本书。我认为我真正想要了解的是测试-驱动-开发部分。在这本书中最引人注目的是,他们首先通过验收测试从用户的角度描述了他们想要发生的事情。
我意识到,一旦我开始编写方法,就必须进行可靠的单元测试,但我很想先使用一些 UI 编写一些高级验收测试。我已经开始编写我自己的应用程序“驱动程序”类,使用一些与 GHAsyncTestCase 想法类似的方法来帮助我完成此任务。这听起来正确/有用/必要吗?
我非常感谢到目前为止的所有评论,它们无疑帮助我在脑海中弄清楚了我要尝试做的事情以及有哪些不同的测试领域。我会尽快完成这个问题,因为它变得相当大,所以欢迎任何最终建议!
最佳答案
我认为我从“成长的面向对象的软件”中学到的关键是尽可能地与 UI 分离。如果没有可查看的代码,就很难提出建议,但根据您的修改,我认为将“验证标签说……”与 UI 分开。什么设置了这个消息,你能测试那个事件吗?
越能与 UI 分离,就越能进行单元测试(更快更容易),而不是集成其他框架或 UI 元素的驱动程序。
关于objective-c - 如何为 Mac (Cocoa) 应用程序创建端到端测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963541/