我一直在阅读关于测试驱动开发的内容,并决定在一个小项目上试试。参考资料是《Growing Object-Oriented Software, Guided by Tests》。
我知道如何对应用程序进行单元测试,也知道如何单元测试某些 UI 部分,但设置端到端测试让我感到困难。例如,测试通过整个应用程序的某个路径生成正确的输出(这是我对端到端测试的基本理解)。
无需模拟点击事件,但需要与 UI 有某种连接。
我认为我需要结合“逻辑”测试(不启动应用程序的测试)、“应用程序”测试(启动应用程序的测试)以及像 GHUnit 这样的异步功能才能实现这一点,这样想对吗?
编辑:
阅读下面一些答案后,听起来我正在寻找功能端到端测试,但我认为我应该举个例子说明我所想象的测试。
- 启动应用程序。
- 使用测试用户凭据调用登录函数。(注意:不一定需要 UI 自动化)。
- 验证窗口上的标签显示“正在登录...”。
- 成功验证用户后,验证标签现在显示“欢迎,Adam!”。
KIF 看起来可以工作,因为它有步骤来检查 UI 元素的更改,并且看起来还有一个 Mac OSX 分支。我相信我也可以编写一个小类,不断轮询我期望的 UI 更改并在一定时间后超时,但我想知道这是否是正确的方法。
然而,也许我正在尝试将我在《Growing Object-Oriented Software, Guided by Tests》中阅读到的内容过于文字化地应用到 Cocoa 上。
另一个更新:
我一直在阅读建议,查看了各个链接,并开始实施一些东西,同时仍然参考书籍。我认为我真正想要的是测试驱动开发部分。在这本书中最引人注目的是,他们首先使用验收测试从用户的角度描述了他们想要发生的事情。
我意识到,一旦开始编写方法,坚实的单元测试是必要的,但我很想先编写一些高级别的验收测试,使用一些 UI。我已经开始编写自己的应用程序“驱动器”类,使用一些与 GHAsyncTestCase 相似的方法来帮助我完成这个过程。这样做听起来正确/有用/必要吗?
非常感谢迄今为止所有的评论,它们确实帮助我理清了自己的想法和不同测试领域。我很快就会结束这个问题,因为它变得相当庞大,所以欢迎任何最后的建议!