追求代码质量 - 通过测试分类实现敏捷构建 - 编程入门网
来看一下。
1. 单元测试 单元测试隔离地 验证一个或多个对象。单元测试不处理数据库、文件系统或 任何可能延长测试运行时间的内容;因而,从第一天就可以编写单元测试。事实 上,这也正是 JUnit 设计的确切目的所在。单元测试的隔离概念有无数的模拟 对象库作后盾,这些库便利了将一个特定的对象从其外部依赖项中隔离出来。而 且,单元测试能够在真正要测试的代码前编写 —— 由此有了测试优先开发 的 概念。 单元测试通常易于编写,因为它们并不依靠于架构的依赖项,且通常运行得 很快。缺点是,独立的单元测试只能覆盖稍显有限的代码。单元测试的重大价值 在于:它们使开发人员能够在尽可能低的层面上保证对象的可靠性。 由于单元测试运行得如此之快且如此易于编写,代码库中应包含许多单元测 试,并且应该尽可能多地运行它们。在执行构建时,应该经常 运行它们,不管 是在机器上,还是在 CI 环境的上下文中(这意味着,代码一经签入 SCM 环境 ,就要运行单元测试)。 2. 组件测试 组件测试验证多个相互作用的对象,但它突破了隔离的概念。由于组件测试 处理一个架构的多个层次,所以它们经常用于处理数据库、文件系统、网络元素 等。同样,提前编写组件测试有点难,所以将其包含至一个真正的测试优先/测 试驱动的场景中是很大的挑战。 编写组件测试要花更长的时间,因为它们比单元测试所涉及的东西要多。另 一方面,由于其宽广的范围,它们实现了比单元测试更广的代码覆盖率。当然它 们也要花更多时间运行,所以同时运行很多的组件测试会显著地 增加总的测试 时间。 许多框架有助于测试大型架构组件。DbUnit 是这类框架的一个典型例子。 DbUnit 能够很好地处理在测试状态间建立一个数据库这样的复杂性,因而它会 使编写依赖于数据库的测试变得较为简单。 当构建的测试延长时,通常都预示着包含了一个大型的组件测试套件。由于 这些测试比真正的单元测试运行时间长,因而不能一直运行它们。相应地,在 CI 环境中这些测试可以至少 每小时运行一次。在签入任何代码前,也应该总在 一个本地开发人员机器上运行这些测试。 验收测试 验收测试 和功能测试类似,不同之处在于,理想情况下,验收 测试是由客户或最终用户编写的。正如功能测试一样,验收测试也像最终用户测 试那样进行。Selenium是一个备受瞩目的验收框架,它使用浏览器测试 Web 应 用程序。Selenium 在构建过程中可以是自动运行的,就像 JUnit 测试一样。但 Selenium 是一个新平台:它不使用 JUnit,在使用方式上也不相似。 3. 系统测试 系统测试端到端地 验证一个软件应用程序。因而,它们引入了一个更高级别 的架构复杂度:整个应用程序必需为要进行的系统测试而运行。如果是一个 Web 应用程序,您就需要访问数据库以及 Web 服务器、容器和任何与运行系统测试 相关的配置。其遵循这样的原则,即大多数系统测试都在软件生命周期的较后周 期中编写。 编写系统测试是个挑战,也需要大量的时间来实际地执行。而另一方面,就 架构性代码覆盖率来讲,系统测试是一件极为划算的事情。 系统测试和功能测试很相似。所不同的是,它们并不仿效用户,而是模拟出 一个用户。与在组件测试中一样,现在创建了大量的框架来为这些测试提供方便 。例如,jWebUnit 通过模拟一个浏览器来测试 Web 应用程序。 用 jWebUnit 还是 Selenium 呢? jWebUnit 是为系统测试设计的一个 JUnit 扩展框架;因而它需要您来编写测试。Selenium 在验收测试和功能测试 方面表现卓越,不同于 jWebUnit,它使非程序员也能够编写测试。理想情况下 ,团队可以同时 使用两种工具来验证应用程序的功能。 实现测试分类 所以,您的单元测试套件就是名副其实的包括单元测试、组件测试和系统测 试的套件 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |