2

任何优秀的软件架构师都会同意,当某人从头开始构建一个新项目时,他一定不能在开始时进行边界(数据库、GUI、外部服务等)。事实上,他应该独立于构建软件的核心任何后端,并将它们视为应用程序的一种“插件”。

TDD 和验收测试促进了每个新功能:

  1. 为功能编写失败的验收测试(端到端)
  2. 借助一些单元测试,推动并完成您的代码设计
  3. 验收测试通过后立即完成。

但是,很多文章解释说验收测试是一个真正真正端到端的测试,因此涉及 GUI(浏览器(例如使用 Selenium)或其他一些界面)。

验收测试不应该基于应用程序的 HEART 并且独立于任何边界吗?例如,这将迫使我考虑 GUI...:s

什么是好的做法?为每个功能编写两种验收测试?:一种用于业务逻辑,另一种确保 GUI 正常工作?

4

1 回答 1

4

首先让我建议阅读Steve Freeman 和 Nat Pryce 的《Growing Object-Oriented Software, Guided by Tests 》。这是迄今为止我读过的最好的软件测试书籍。它的优点是作者不关注像Calculator类这样的虚拟用例和使用 TDD 来测试add(int, int)方法。这很愚蠢。相反,他们使用 Swing 接口、通过 XMPP 的网络连接和相当多的业务逻辑来构建功能齐全的应用程序。这让我们回到你的问题。

上面这本书的作者使用了各种技术和工具,但他们始终保持 TDD 实践。对于单元测试,他们使用,但对于验收和集成测试,他们实际上会自动启动应用程序 (GUI) 和 XMPP 测试服务器。

他们设法通过在测试和 GUI 之间采用高度分离来测试驱动 GUI 测试。您应该将您的用户界面(Web、桌面、SOAP Web 服务等)隐藏在一个名为driver的抽象后面。您的测试仅使用高级方法(如placeOrder("Foo"). 每个驱动程序 ( BrowserDriver, SwingDriver) 都了解这意味着什么,要么浏览您的网页,要么点击胖 GUI 上的按钮。

如果您可以在不更改测试但仅通过更改底层驱动程序的情况下更改您的 GUI,那么您做对了。

也可以看看

于 2013-01-20T15:04:16.937 回答