为什么手动运行测试时,计算机可以为你做!自动测试是一个伟大的工具,以加快测试驱动用Ruby或Ruby on Rails的发展。
自动测试,甚至使你的编码会话更有效率,因为它会自动运行您的测试套件,每次更改一个文件的一个子集。自动测试是智能-数字的子集上运行你修改过的文件的基础。把它看成是连续测试。
自动测试的源代码是记录良好(RDOC),但找到一个高层次的概述在线是一个更具挑战性的一点。本文将帮助你在任何时间运行,使您可以集中精力编写代码。让我们开始吧!
1。为什么自动测试?
1.1连续测试。
关于自动测试很酷的事情是,你有你的代码的即时反馈(在一秒钟内运行测试)。更妙的是,测试发生在自己的,所以你再也不用来回切换了从编码方面的测试内容(既明智的认知,从UI的角度来看)。这对你的代码,以及自动化和无人值守的测试运行的轻松和即时反馈Martin Fowler的传奇介绍球队的水平在持续集成的特点非常相似。然而,持续集成,专注于提高集成在一个团队水平而自动测试集中于促进发展为一个单一的开发者(或编程)对之前的代码被集成-因此长期连续测试。
由于这是高度可视化,在Nuby看看Rails的自动测试截屏。
1.2更快的测试运行
自动测试还可以提供更快的测试运行,比标准的公约,因为它智能监控的变化和运行测试,这些变化的影响。在实践中,这是有关经典的Rails应用程序,因为 :
Rails约定提供了良好的启发式自动测试,以决定运行哪些测试文件变化时。如果您的应用程序不拘泥于经典的Rails布局和命名约定的魔力不那么好了工作 。在这种情况下,它可能是更好的自动测试所有更改运行整个测试套件。
值子集运行整个测试套件运行不仅是因为经典的Rails单元测试可能会很慢。这主要是因为Rails的单元测试方法是相当标新立异,并涉及到数据库访问 。这种做法违背一般的敏捷的智慧,你应该确保你的单元测试快速运行,并没有任何外部系统的依赖。另外请注意,有记录的方式有你的Rails单元测试不依赖于数据库和,让他们运行速度极快!
1.3弥补缺乏一个适当的Ruby IDE
自动测试可以派上用场,如果您喜欢的IDE Ruby的支持有限,或者如果你喜欢一个更轻量级的开发环境(文本编辑器+终端+自动测试):它给你一个简单和自动化的方式来运行测试。
2,安装自动测试
2.1。确保您已经有RubyGem安装
安装自动测试最简单的方法是使用ZenTest的宝石 。如果您有没有一个“红宝石宝石”是什么想法,或者你还没有安装RubyGem包装系统,请有在看RubyGem官方网站。
相信我,如果你对Ruby开发严重,这将是很难不使用RubyGem。
2.2 OS X和Linux
在OS X或任何其他的UNIX系统,你通常用下面的命令安装ZenTest:
sudo的创业板安装ZenTest
如果你打算做任何的Ruby on Rails开发,你还需要安装自动测试的Rails插件:
sudo的创业板安装自动测试导轨
3,运行自动测试
3.1Ruby on Rails项目。
与Rails的原则,自动测试,不需要任何配置来运行 。只要你遵守约定经典的Rails,自动测试将图事情本身。只需启动你的Ruby on Rails项目的基本目录的自动测试。
你的Ruby on Rails的项目> $ CD <base目录
$自动测试
自动测试将运行所有的测试(第一次),并等待你修改一些代码:
$自动测试
/ usr/bin/ruby1.8我:LIB:测试-rtest/unit - E“%W [测试/功能/ tasks_controller_test.rb测试/单位/ quarter_test.rb测试/单位/ task_test.rb]每个{ | F |求购信息F}“| unit_diff - U
加载套件- E
入门
在0.672928秒完成。
** 23的测试,60断言,0失败,0个错误**
继续前进,一些项目中的代码修改,使测试失败。修改后的文件保存到磁盘和自动测试会自动重新运行一些测试 :
/ usr/bin/ruby1.8我:LIB:测试-rtest/unit - E“%W [测试/功能/ tasks_controller_test.rb测试/单位/ task_test.rb]每个{| F |要求F}” | unit_diff - U
加载套件- E
入门
... ...楼.......
在0.42272秒完成。
故障原因:1)
(TaskTest)test_should_be_found [**./测试/单位/ task_test.rb:22 **]:
--- / tmp/diff6647.0 2006-11-15 20:46:43.000000000 -0800
+ + / tmp/diff6647.1 2006-11-15 20:46:43.000000000 -0800
@ @ -1 +1 @ @
**
预期结果
+实际结果**
================================================== ==============================
** ** 4测试,9断言,1失败,0错误</ PRE>
请注意,测试运行测试套件只有一个子集的时间(4 23测试,在我的情况)。另外请注意,自动测试,特别是在提供测试失败的短暂和相关反馈 。
自动测试的重点在运行以前的失败,直到你有固定 。因此,测试失败的运行,直到他们全部通过。然后运行完整的测试套件,以确保没有其他意外破裂 。
3.2。 RSpec的集成
自动测试假定你写你的测试使用默认的测试:单元,或兼容的测试框架(像Shoulda或minitest)。
如果你喜欢写测试RSpec的方式,你将需要给测试的一个小提示,触发与RSpec 的整合1:RSPEC 环境变量设置 为true ,然后调用自动测试命令:
RSpec的=真正的自动测试
RSpec的船舶或者使用一个autospec命令,你可以使用一个下拉更换自动测试自动化运行您的规格:
autospec
3.3 Ruby项目
从理论上讲,你会运行自动测试任何Ruby项目相同的方式 - 即使它不??是基于Rails的:
CD <base目录你的Ruby项目>
自动测试
自动测试在实践中,可能有问题,找到你的测试或搞清楚当你改变一些代码测试运行。如果是这样的情况下,采取了“在看节故障排除自动测试检验检测 “
3.4强制全面的测试运行和停止自动测试
如果你想迫使测试运行整个测试套件,按下Ctrl - C在终端运行自动测试一次。,按下Ctrl - C组合键两次将停止自动测试。
4,启用插件和自定义的自动测试
自动测试还提供了一些酷的插件,使您能够得到反馈,你想要的方式。
4.1创建一个自动测试文件
您可以自定义的自动测试和配置。自动测试项目的基本目录中的文件创建一个插件。您还可以通过创建一个为您的所有项目的默认配置。自动测试在你的文件的主目录 。正如你所期望的的,当目前,项目的配置文件覆盖用户的默认配置文件 。
一旦你已经自动测试。文件,使您的系统上一个新的自动测试插件首次通常包括两个步骤:
您安装提供的插件实现一个RubyGem。例如安装的低吼插件,你可以运行 :
sudo的创业板安装自动测试的咆哮
对于大多数-但不是全部-插件你再加入一条线,要求它在启用的插件自动测试文件 。例如,为了使低吼插件,您将添加以下行:
需要“自动测试/咆哮”
请记住,你必须重新启动自动测试之后,编辑。自动测试前修改的文件虽然效果 2 。
下面你会发现最流行的插件和如何使他们的描述。
4.2。 FSEvent插件
部分自动测试的智慧,它会自动检测您的更改,只要你保存文件 。不过,如果你去与自动测试的香草安装,这种神奇的来的价格也不便宜。自动测试将不断轮询你的文件系统检测的变化:一个肯定的方式挂你的CPU,漏在任何时候你的电池炒您的硬盘驱动器,增加你的碳足迹 ... ...你的图片!总之,这是恶业,唯一的原因自动测试它默认情况下,这种方式是可移植性:此实现不作任何假设您的操作系统的能力 。
现代操作系统提供的文件系统事件通知的API提供一个更有效的方式来检测文件系统上的变化3。简而言之,应用程序可以注册文件系统的特定事件和特定领域的兴趣 。然后,操作系统将提醒通过异步回调,当(且仅当)的变化发生在文件系统中的应用。
这就是为什么你应该安装自动测试fsevent插件,如果你是在Mac上的发展:当您安装并启用自动测试,fsevent,自动测试将停止不断轮询你的文件系统,将使用OS X的文件系统事件通知来检测变化。为您的Mac,它会给回你!
首先安装插件:
sudo的创业板安装自动测试,fsevent
然后启用它在你的自动测试文件:
要求“自动测试/ fsevent”
瞧,自动测试现在是温柔与您的计算机!其实有办法,使其更温柔... ...这是下一节的主题 。
4.3忽略了与例外的文件
默认情况下,自动测试将改变监视每个文件在Ruby / Rails项目4。significally告诉它忽略某些文件,您可以减少其对CPU,磁盘和电池寿命的影响 。
您可以在您的添加显式异常(被忽略的文件)。自动测试文件与 add_exception命令 。OS X的一些元文件和您的Ruby 项目的供应商目录,例如忽略了各种源控制元数据的内容,您的自动测试文件中添加以下代码:
自动测试。add_hook :初始化 做 | 自动测试|
%W { 。。。一下git svn HG DS_Store _ *供应商TMP日志文档。} 每个 | 例外|
自动测试。add_exception (例外)
年底
结束
4.4重新启动插件
当你深入调整你的自动测试。文件-你可能是在阅读这篇文章-手动重新启动后,每一个变化。自动测试自动测试可以一拖。输入重新启动插件:当您启用,自动测试将重新启动,就会自动在自动测试。文件检测到的变化 。
要启用该插件,你需要做的是您的自动测试文件添加下面的代码片段:
要求 “ 自动测试/重新启动“
... ...并重新启动自动测试手动最后一次(讽刺)。
4.5红/绿插件
在终端窗口中的“红/绿”的插件提供色彩测试消息 。输出正如预期的那样,是绿色的,如果所有的测试都通过了,红色的,如果一些测试失败。在红/绿的视觉输出更容易扫描输出,并迅速确定是否一切正常,或出事了。
从外观上看,红/绿的插件打开
================================================== ==============================
200测试,520断言,0失败,0个错误
成
================================================== ==============================
200测试,520断言,0失败,0个错误
或
================================================== ==============================
5测试中,20断言,1失败,0个错误
安装插件:
sudo的创业板安装redgreen
为了让“红/绿”的插件您的自动测试文件中添加以下行 :
要求 “ redgreen /自动测试“
4.6桌面通知插件
你可能甚至不看找出一个测试运行的结果的自动测试终端输出。几个插件提供桌面通知消息的能力。这样,你可以在后台运行自动测试和看到弹出消息时失败 。
低吼插件(OS X)4.6.1。
如果您在Mac上进行开发,低吼是一种流行的OS X的桌面通知系统,安装的低吼插件:
sudo的创业板安装自动测试的咆哮
然后启用它加入
要求 “ 自动测试/咆哮“
您的自动测试文件。
请注意,低吼插件工作,你需要有系统上已经安装的低吼本身。如果你没有安装低吼或不确定,低吼网站下载最新版本。
低吼插件提供了一些自定义选项,您可以设置。自动测试文件。他们在创业板的README.rdoc包含的文件记录。这里有一些设置,你可以调整 :
接收低吼通知,上市文件修改测试前重新运行
自动测试:低吼::show_modified_files = TRUE
只允许一个测试和运行的每一个功能通知
自动测试:低吼::one_notification_per_run = TRUE
不要在运行测试之前,明确终端:
自动测试:低吼::clear_terminal = FALSE
不要在低吼通知包括标签,如“Rails的所有单元测试都通过了”。
自动测试:低吼::hide_label = TRUE
自定义图标设置: 你可以定义你自己的一套图标在使用低吼通知。请参考有关详细信息,自动测试,咆哮的自述文件。
4.6.2测试通知插件(Linux和Windows)
如果您正在运行Linux或Windows,你仍然可以得到与测试桌面通知发出通知插件,这个插件提供了适用于Linux,Windows和OS X桌面通知的原生技术的广泛使用( libnotify , knotify ,咆哮和低吼仅举数)。请注意,操作系统,低吼插件X -我们刚刚在上一节所述-提供比一个更轻量级的测试通知插件虽然安装 。因此,在这个文件中,我将只包括Linux和Windows上安装6。
在安装测试通知插件,您将需要安装插件将触发底层的通知mecanism库:
如果您正在运行在Linux 上使用Gnome桌面,您需要在您的系统和程序名为libnotify安装在你的PATH中发送通知。对于大多数Linux发行版,这只是意味着,你应该安装libnotify斌包 。在Ubuntu,你只需要运行
sudo易于得到安装的libnotify - bin
如果您正在运行在Linux 上使用KDE桌面,你不需要安装任何东西。测试通知插件将自动使用KDE的knotify。
如果你是在Linux 上运行,既不精也不KDE作为桌面使用,您将需要安装xosd斌。在Ubuntu上很简单,只要:
sudo易于得到安装xosd斌`
如果你是在Windows上运行,你需要安装咆哮-从它的官方网站下载- 红宝石咆哮插件:
创业板安装Ruby的咆哮
一旦你完成安装底层的本地通知系统库,您可以安装并启用测试通知插件通常的方式。第一:
sudo的创业板安装test_notifier
然后添加下面的代码在您的snipet 自动测试文件:
需要 “ test_notifier /自动测试“
4.7。时间戳插件
虽然自动测试等待您保存文件,打印时间戳插件与当前时间的消息。消息看起来像:
#等待... ... 周六2月03十五点56分23秒东部时间2007年
为了使时间戳插件以下内容添加到您的自动测试文件:
要求 “ 自动测试/时间戳“
4.8获取更多信息
你测试安装配备了一个样本。列出所有可用的插件自动测试文件。它被命名example_dot_autotest.rb。你会发现它在宝石的安装目录。最有可能这个目录将看起来像:
在OS X / Library/Ruby/Gems/1.8/gems/ZenTest-4.2.1 /
/ usr/lib/ruby/gems/1.8/gems/ZenTest-4.2.1 /其它Unix平台
5。故障排除自动测试检验检测
无论自动测试不工作框,为您或它的魔法躲避你,这是一件好事,得到一些自动测试使用的启发式图其中测试(S)运行的理解。
5.1 Rails的启发式
自动测试自动检查发现的config / environment.rb文件中的Ruby on Rails的项目。如果有一个自动测试基地标准的Rails文件映射和公约的逻辑 。
如果由于某种原因,你要强制的Ruby on Rails的模式,您可以随时启动自动测试与导轨选项 :
自动测试,导轨
一个简化的版本在这种模式下的自动测试启发式会 :
当改变一个测试文件,这个文件运行(例如测试/单位/ foo_test.rb → 测试/单位/ foo_test.rb)。
当改变一个模型文件,只有相关的单元测试文件运行(例如,应用程序/模型/ foo.rb → 测试/单位/ foo_test.rb)。
当改变一个控制器文件,相关的功能测试文件运行(如APP /控制器/ foo_controller.rb →测试/功能/ foo_controller_test.rb) 。
当改变一个fixture文件,相关的单元测试和功能测试运行(例如,应用程序/装置/ foos.yml →测试/单位/ foo_test.rb +测试/功能/ foo_controller_test.rb) 。
当改变一个辅助文件,相关的功能测试文件运行(如APP /佣工/ foo_helper.rb →测试/功能/ foo_controller_test.rb) 。
改变application_helper.rb文件时,所有功能测试文件运行(例如 application_helper.rb →测试/功能/ * _test.rb) 。
改变下的config目录下的文件时,所有的测试运行。
你已经得到了主意。实际启发式稍微复杂一些,也处理的概念视图和控制器的测试。对于更thourough了解在看rails_autotest.rb文件 ZenTest创业板的安装目录。
情况下,这些启发式用自己的“公约”不玩,不放弃的是:你总是可以配置自动测试运行整个测试套件的所有更改。
5.2启发式非Rails的项目
对于非Rails的项目,自动测试使用一个简单的命名计划,以图实现文件测试文件:
测试文件必须存储在测试目录
实现文件的 lib 目录中必须存储在
测试文件的名称必须与 test_
相应的具体实施文件测试文件必须命名为test_ * <span class="placeholder"> name_of_implementation_file </ SPAN>。RB
测试类的名称必须与测试开始
测试测试类的名称对应到一个特定的的实现类必须被命名为<span class="placeholder"> ImplementationClassName </ SPAN>。 RB
如果你能忍受这些公约,自动测试将工作外的框为您。如果这些公约是不是你杯茶,你有自己的,下段说明了如何配置测试,以便它运行整个测试套件,你每次保存文件。
所有更改运行整个测试套件5.3。
测试启发式如果由于某种原因不为你工作,你可以自定义他们在你的一点点的工作。自动测试文件。
例如,如果您的整个测试套件运行迅速,因为它应该的,你可以很容易地覆盖自动测试的默认逻辑和配置,运行下面的代码加入到您的任何改变整个测试套件自动测试文件:
#重载自动测试默认魔术每一个时间重新运行所有测试
。
DEF get_to_green
年底
开始
rerun_all_tests wait_for_changes
结束
6。结论
自动测试提供了一个容易和轻松的方式运行测试:只保存文件。这是一个伟大的方式得到你的代码的快速反馈,并避免任何上下文切换。自动测试的自动化测试运行也extremelly有价值,如果您喜欢的IDE Ruby的支持较差,或者如果你喜欢更ligthweight的开发环境(文本编辑器+终端+自动测试)。
自动测试也力图在决定测试运行的智能:
它只能运行您最新的代码更改影响的试验。
当一些测试失败,自动测试的重点在运行以前的失败,直到你有固定。一旦通过,运行完整的测试套件,以确保没有别的意外打破。
在决定运行哪些测试,自动测试神奇的作品开箱,如果您的应用程序如下经典的Ruby on Rails的公约 。如果这不是你杯茶,这是非常容易自定义测试,以适合你的公约。
通过它的插件自动测试还提供了很多有趣的反馈选项,从终端输出为HTML发布到桌面通知。
在另一面,是很重要的注意,自动测试,并不适合所有的研究与开发风格:一些开发商想更好地控制它们正在运行哪些测试。当工作一段代码,他们通常会focuss上几个测试(他们知道他们可以打破),然后提交之前运行整个测试套件。自动测试模拟以及它可以与他在运行以前的失败的焦点,但最终是人的意志总是有一个更好的直觉。
在所有情况下,这是值得花一些时间,连续测试与自动测试和实验,其创新性,重量轻,毫不费力的方法来测试运行,我一直在呼吁打。
假设你已经RSpec的创业板已经安装在本地的。
除非你开启了自动测试重新启动插件,我们将在后面。
SGI公司曾机制,Linux有inotify的,OS X有FSEvent,等
通过FSEvent或蛮力投票。
供应商目录是一个伟大的候选人自动测试的例外:你是不是应该手动编辑其内容,它通常包括一个很大的数字文件。
测试发出通知README文件包含安装OS X的指令,如果你真的需要它们。
|