热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>编程开发>Ruby>

使用Eclipse+RDT插件进行Ruby开发

来源: 作者: 时间:2007-09-12 Tag: 点击:

  十一、 测试

  作为Java开发者最难实现的Ruby特征之一是动态类型化。如果你习惯于一种强类型化语言,那么动态类型化看上去似乎有点混乱。DT允许各种高级元编程技巧-这在一种强类型化语言中是很难或不可能实现的。当然,你可以放弃编译时刻类型检查的安全设置。那么,是否有一个方法能够实现两种世界的最佳结合呢?

  单元测试应该是每一种语言必须实现的,但是它在动态语言中特别关键。单元测试比编译揭示了更多的内容。事实上,你应该改变在单元测试和编译之间的关系上的观点。最近,一位高级软件开发专家认为,"在今后的五年内,我们会把编译作为单元测试的一种弱的实现形式"。单元测试能够提供证实(verification)-编码将如期实现,而不是仅仅进行你输入内容的语法检查。

  考虑到单元测试在Ruby世界中的极端重要性,你一定会希望RDT能够使得单元测试易于运行。的确如此!单元测试被包括在Ruby内,因此你不必下载任何其它的扩展。Ruby库中包括了一个 TestCase类和一个TestSuite的概念。你可以象创建任何另外的Ruby类一样来创建你的单元测试,从Test::Unit:: TestCase中子类化你的测试。列表1是一个Employee类的实例。

  列表1.Employee类

class Employee
 def initialize(name, salary, hire_year)
  @name = name
  @salary = salary
  @hire_year = hire_year
 end
 attr_reader :name, :salary, :hire_year
 def raise_salary_by(perc)
  @salary += (@salary * (perc * 0.01))
 end
 def to_s
  "Name is #{@name}, salary is #{@salary}, " + "hire year is #{@hire_year}"
 end
end

  相应的单元测试如下:

  列表2.相应于Employee类的单元测试

require 'test/unit/testcase'
require 'test/unit/autorunner'
require 'hr'
class TestEmployee < Test::Unit::TestCase
 @@Test_Salary = 2500
 def setup
  @emp = Employee.new("Homer", @@Test_Salary, 2003)
 end
 def test_raise_salary
  @emp.raise_salary_by(10)
  expected = (@@Test_Salary * 0.10) + @@Test_Salary
  assert( expected == @emp.salary)
 end
end

  为了运行这个单元测试,你可以为该单元测试类创建一个Run配置-作为一个Test::Unit类型,见图12。


图12.RDT包括一个Test::Unit Run配置

  当你运行这个测试时,你会得到与Java单元测试相同的支持元素,包括在左下角的类JUnit格子。


图13.运行于IDE中的一个单元测试的例子

  你还可以在Ruby中创建TestSuites。TestSuites是Ruby类,它定义一个返回TestSuite的suite方法。这个 TestSuite由自动地在每个TestCases中定义的suite组成。列表3是针对几个类的一个示例TestSuite。

  列表3.一些类的示例TestSuite

require 'test/unit/testsuite'
require 'test/unit/ui/tk/testrunner'
require 'test/unit/ui/console/testrunner'
require 'TestEmployee'
require 'TestManager'
class TestSuite_AllTests
 def self.suite
  suite = Test::Unit::TestSuite.new("HR Tests")
  suite << TestEmployee.suite
  suite << TestManager.suite
  return suite
 end
end
#Test::Unit::UI::Tk::TestRunner.run(TestSuite_AllTests)
Test::Unit::UI::Console::TestRunner.run(TestSuite_AllTests)

  不同于前面运行单个TestCase的实例,这里的suite作为一独立的应用程序运行。Ruby有两个方法可以显示TestSuite的结果。第一个是"Console Test Runner"-它在控制台输出它的结果。第二个是"Tk TestRunner",它创建一个熟悉的对话框来显示测试的结果。图14显示了一个Tk TestSuite对话框。


图14.图形式的TestSuite对话框

  十二、 新版本中的改进

  RDT的当前版本是0.50。目前,其开发者正在开发0.60版本。下一个版本中将改进的方面包括:

  · 代码折叠功能-提供针对类和方法的代码折叠功能。

  · Outline视图-提供更详细的信息,包括对局部变量的支持。

  · RI视图-从一个RDT视图中使用Ruby的ri工具。

  · 任务标签-以Ruby注释形式为可配置的关键字(如TODO,FIXME)创建任务。

  · 编辑器方面的改进-自动添加大括号,圆括号和单/双引号;还有更好的代码助手。

  · 检查器快捷方式-在一个调试会话期间,针对经常使用的检查器提供可配置的快捷方式,如显示一个对象的所有方法,全局常量,等等。

  接下来的版本将更好地使用JRuby字节码编译器。JRuby是一项工程,它允许把Ruby代码编译为Java字节码。这意味着,RDT的以后版本将更容易地加入到Eclipse世界中,甚至提供更好的支持。

   十三、 总结

  Ruby最终为业界人士所广泛认可和应用。其中,部分原因应该归功于Ruby on Rails工程的成功的驱动。如今,已经到了考虑如何把Ruby加入到你的"竞争工具箱"中的时候了。当然,RDT也是吸引你加入这一领域的一个重要因素。


最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表