FeaturesDocs & SupportCommunityBlogsPartners

测试驱动 Rails 开发

本文介绍 NetBeans IDE 中辅助测试 Ruby 和 Rails 代码的一些特性。NetBeans 提供了很多测试选件方便您对应用程序进行单元测试。

目录

教程需求
NetBeans IDE Ruby 测试支持
Test::Unit 测试
自动测试
Rspec 测试
  本页面的内容适用于 NetBeans IDE 6.0

教程需求

 

Ruby 和 Ruby on Rails 应用程序开发者可以调用许多测试特性来辅助测试和调试项目。本文涵盖了当前可用的特性。

本教程需要使用如下技术:

NetBeans IDE Ruby 测试支持

NetBeans IDE 支持很多 Ruby 测试框架和特性。我们将向您展示都支持哪些内容,并提示您如何使用这些测试特性。我们同样将介绍一些方便您追踪错误、以及在源代码和测试用例之间相互切换的 NetBeans 独有特性。

在我们涉及 Ruby 相关的测试特性之前,我们先简要介绍一下单元测试及其基本概念。 当我们谈及单元测试时,我们所指的是那些开发者用以验证应用程序源代码中的独立单元能否正常工作的的测试。一个单元被定义为应用程序中能被测试的最小部分。因此,对于面向对象程序设计而言,一个单元就是一个类,可能是一个基类、超类、抽象类或者派生类(子类)。而另一方面,在面向过程程序设计中,一个单元则典型地为一个独立的程序、函数或者过程。注意不要将单元和模块混淆,模块是应用程序中相对较大的部分,通常由单元构成。

单元测试通常需要一组相互独立的测试用例。测试用例可能使用模拟的对象来辅助测试,特别是使用真实对象非常困难、严重消耗时间或者难以生成的时候。模拟对象能被用于测试另外一个对象的行为是因为它以一种受控方式模拟真实对象的行为。模拟对象的一个很好的例子是在撞车实验中使用假人代替真人。

测试装具(harness),或者自动测试框架,对于单元测试同样重要。测试装具(harness)是一组软件代码和测试数据的集合,能将程序单元在多种条件下运行,并同时监视单元行为以及输出。由于可被重复使用,测试装具能够自动化单元测试。

Test::Unit 测试

Ruby 带有一个内置的测试框架,称之为 Test::Unit。由于 NetBeans IDE 直接支持 Test::Unit,故您从“新建”菜单中就能创建新的单元测试。在“项目”窗口中,右键点击该 Ruby 项目,选择“新建”->“Ruby 单元测试”。

图 1:创建一个 Ruby Test::Unit

创建新的 Ruby 单元测试

“新建 Ruby 单元测试”对话框会提示您该单元测试文件的相关信息,包括要运行测试的类,测试文件的名称,其模块,以及其在项目中的模板目录位置。点击“完成”后,IDE 会创建单元测试的骨架文件,您即可向其中添加您特定的测试代码。IDE 会将此文件存放在项目特定的目录位置中。

图 2:创建单元测试文件

标题文本 - 点击查看大图
点击查看大图

有许多方法来进行测试或者运行单元测试。大多数情形下,您要使用编辑器窗口上下文菜单中的“运行文件”或者“ 测试文件”选项(您也可以在“项目”窗口中的文件调用“运行”->“运行文件”)。

使用“测试文件”或是“运行文件”选项

“测试文件”(Ctrl+F6)选项(在编辑器上下文菜单和“运行”菜单中),是运行测试文件的一种更好的选择。 您可以从测试文件本身运行“测试文件”,或者从想要测试的类运行“测试文件”。“运行文件”选项(也在编辑器上下文菜单和“运行”菜单中),要求执行必须在为需要测试的类所编写的测试文件处。“测试文件”选项的优势是,您可以所需测试的文件处即可运行,而无需位于其所对应的测试文件处。

为了说明使用“测试文件”选项的好处,我们假设您正处理用于 Rails 控制器的单元测试。当您位于控制器测试文件处时,运行“测试文件”选项,会运行此测试文件作为测试。然而,即使是编辑控制器类本身时也能同样方便。 比如,您正在编写控制器类的过程中想要对其测试,您仅仅需要执行“测试文件”选项(按下Ctrl+F6),就能够运行与您此刻编辑的类所对应的测试文件。若是您对该控制器类使用“运行文件”选项,IDE 则会在浏览器中打开该控制器的 URL。因此,记住“运行文件”选项用来在浏览器中运行应用程序的一部分,而“测试文件”选项则运行与应用程序该部分相对应的测试。

“测试文件”和“运行文件”之间还有一个很重要的区别。当对一个测试文件应用“测试文件”选项时,会运行该文件作为测试。运行一个文件作为测试会告知 IDE 将执行代码视为测试,同时监视输出中的失效信息。当前版本中,若 IDE 一旦发现任何失效信息,则会创建一条红色警告信息在编辑器窗口底部,类似于“自动测试”中的红色消息。

“运行项目”和“测试项目”选项也有同样的差异。“测试项目”(项目上下文菜单中的“测试”选项),会运行项目中的所有测试。(当前版本中,运行项目的所有测试仅对 Rails 项目有效。)对一个项目执行“运行”选项,实际上会在浏览器中运行该项目。

图 3:测试单元测试文件

标题 文本 - 点击查看大图

底部的“输出”窗口会显示执行单元测试时产生的输出。由于测试输出是被超链的,故您可以通过使用“导航”->“下一项错误”菜单选项进行浏览。

图 4:Test::Unit 输出示例

创建新的 Ruby 单元测试

“转至测试”动作选项(位于编辑器窗口的上下文菜单中),能让您在类及其相应的测试用例直接快速跳转。在编辑器窗口中右键点击源文件的任何地方,然后选择“导航”->“转至测试”选项(Windows 系统下快捷键是 Ctrl+Shift+T,Macintosh 系统下快捷键是 Command+Shift+T)。“转至测试”动作能感知 Test::Unit 的约定规则。同时也能感知 Rails、RSpec 和 ZenTest 的约定规则。

图 5:“转至测试”动作

创建新的 Ruby 单元测试

点击查看大图

 

自动测试

Ruby 项目也可引入“自动测试”选项。当您修改文件时,“自动测试”即自动运行单元测试。对 Ruby 项目,及其他大多数情形而言,“自动测试”能确定哪些单元测试需要被运行。若其不能确定,“自动测试”则默认会运行所有的单元测试。

“自动测试”选项在您安装 ZenTest Ruby Gem 后即可用。可以使用“工具”菜单中的“Ruby Gems”选项来安装 ZenTest 或者其他 Ruby Gem。选定该选项后,IDE 会载入已安装的 Ruby Gem,并显示所有可用的和新的 Gem。点击“已安装”选项卡可以查看已经安装的 Ruby Gem。

图 6:检视已安装的 Ruby Gem

标题文本 - 点击查看大图
点击查看大图

如果 ZenTest 未被安装,点击“新 Gem”选项卡,在列表中定位 zentest,将其选中,然后点击“安装”。

图 7:安装 ZenTest Ruby Gem

标题文本 - 点击查看大图
点击查看大图

您应会看到一条消息,指示 ZenTest 及其相关的库和工具已被安装。

图 8:ZenTest 安装消息

创建新的 Ruby 单元测试

一旦 ZenTest 被安装,则在项目的上下文菜单中即可看到“自动测试”选项。在“项目”窗口中,右键点击 Ruby 项目节点,然后选择“自动测试”选项启动项目的自动测试。如前所述,一旦文件有改动,“自动测试”就会运行合适的单元测试或者所有单元测试。

图 9:调用“自动测试”

创建新的 Ruby 单元测试

“自动测试”的输出会出现在“输出”窗口中。如果产生失效,“自动测试”将在编辑器窗口底部显示一条摘要消息。“输出”窗口中“自动测试”窗格可能被隐藏,您可以点击“自动测试”选项卡,并检查详细的输出信息,以便确定产生失效的原因。您也可以通过点击“自动测试”输出中的超链,直接转至失效的测试用例处。

图 10:“自动测试”摘要消息与“输出”窗口

标题文本 - 点击查看大图
点击查看大图

捷径“转至测试”动作(Ctrl+Shift+T)也能在“自动测试”上下文中工作,可以直接转至匹配的测试文件。

注意:“自动测试”支持会在不久后增强。增强扩展可能包括在任务列表中显示测试失效信息。JRuby 对 “自动测试”的支持也会增强。若您在 JRuby 中正确运行“自动测试”时遇到问题,则要切换至 本地 Ruby。

Rspec 测试

rspec Ruby Gem 是另一个用于单元测试的工具。其作为 NetBeans IDE JRuby 分发的一部分绑定,故如果您使用绑定的 Ruby 解释器,rspec 即也被安装。当 rspec 安装后,项目中便会引入一个包含规范文件的 spec 目录。

然而,您应决定是否使用本地 Ruby(可在“选项”对话框中切换解释器),之后则要检查一下 rspec 是否被安装(参见图 6)。若未安装,点击“工具”->“Ruby Gems”,然后选择“New Gems”选项卡(参见图 7)将其安装。如果您想与 Rails 一起使用 rspec,您可能需要安装另一个 Ruby Gem,并查看一下这些指导说明

您可以使用“转至测试”动作来打开任意规范文件。可以使用编辑器上下文菜单中的“测试文件”或者“运行文件”来在 rspec 的控制下运行规范文件,这意味着该测试将遵循可在 spec 目录中 spec.opts 文件中找到的规范文件选项。注意,前面讨论的相同顾虑在此环境下适用于使用“测试文件”或是“运行文件”一节。 您也可以从 IDE 中运行测试,并使用一组不同的选项,例如关闭红色和绿色标色的旗帜。创建一个带有不同选项的文件 spec.opts.netbeans,并将其放在相同的 spec 目录中。

spec 文件模板功能目前尚不可用,但会很快被引入进来。

小结

本文介绍了有关测试 Ruby 应用程序的 NetBeans IDE 特性。包括基本单元测试特性、自动测试和 rspec。也解释了如何在 IDE 中安装 Ruby Gem,以及使用 IDE 的快捷测试特性。

 

更多内容

 

>> 更多 NetBeans Ruby 文档

Companion
Projects:
                  Powered by: