FeaturesPluginsDocs & SupportCommunityPartners

测试驱动 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 文档

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Open ESB - The Open Enterprise Service Bus Powered by