我上周刚开始学习 Ruby,所以请多多包涵。
我正在使用 Ruby 1.9.3。我在尝试运行单元测试时遇到问题,过去 2 天我一直在尝试,但我无法成功运行单元测试。
这是我的简单计算器类的代码:
class Calc
def initialize
end
def Add(leftOp, rightOp)
return (leftOp + rightOp)
end
def Sub(leftOp, rightOp)
return (leftOp - rightOp)
end
def Div(leftOp, rightOp)
if(rightOp == 0)
raise ArgumentError.new("Divided by 0")
else
return (leftOp / rightOp)
end
def Mult(leftOp, rightOp)
return (leftOp * rightOp)
end
end
myCalc = Calc.new
puts "2 + 3 = " + myCalc.Add(2, 3).to_s
puts "2 - 3 = " + myCalc.Sub(2, 3).to_s
puts "2 * 3 = " + myCalc.Mult(2, 3).to_s
puts "6 / 3 = " + myCalc.Div(6, 3).to_s
puts "10 / 0 = " + myCalc.Div(10, 0).to_s
这工作正常。所有输出都按预期打印出来。现在,我想为这个类编写一个单元测试。下面是单元测试的代码:
require 'test/unit'
require 'test/unit/ui/console/testrunner'
require 'Calc'
class Test_Calc < Test::Unit::TestCase
def setup
myCalc = Calc.new
@result_1 = myCalc.Add(5, 8)
@result_2 = myCalc.Sub(9, 15)
@result_3 = myCalc.Mult(8, 6)
@result_4 = myCalc.Div(18, 3)
@result_5 = myCalc.Div(2, 0)
end
def test_Add
assert_equal(@result_1, 13)
end
def test_Sub
assert_equal(@result_2, -6)
end
def test_Mult
assert_equal(@result_3, 48)
end
def test_Div
assert_equal(@result_4, 6)
end
def test_Div_Zero
assert_match("\Divided by 0\", e.message)
end
end
Test::Unit::UI::Console::TestRunner.run(Test_Calc)
当我运行这个单元测试时,它吐出了这个错误
Calc.rb 文件与 test_Calc.rb 文件位于同一目录中。为什么它看不到?我什至尝试将 Calc.rb 文件复制到“custom_require.rb”文件(“lib/ruby/site_ruby/1.9.1/rubygems”)的同一目录,但这没有帮助。
在网上搜索后,我了解到 Test::Unit 已被删除并替换为 MiniTest (!)。所以,我尝试了 MiniTest 的事情如下:
require 'minitest/unit'
require 'Calc'
class Test_Calc < MiniTest::Unit::TestCase
#Test_Calc definition
end
MiniTest::Unit.autorun
我仍然得到与以前完全相同的错误,所以也许我在 MiniTest 上做错了什么。
我什至按照以下站点的示例进行操作,但在我的情况下似乎不起作用。即使我有一个完全定义的类 (Calc.rb),我仍然得到“Calc - (LoadError)”。
http://www.ibm.com/developerworks/opensource/tutorials/os-ruby1/section3.html
再次在网上搜索后,我了解到 test::unit 可以作为 gem 用于向后兼容,因此我从以下链接下载并安装了 test-unit-2.5.4.gem:
http://rubygems.org/gems/test-unit
即使安装了 gem,它仍然无法工作(我检查以确保 gem 安装在“Ruby193\lib\ruby\gem\1.9.1\gems”中)。Ruby 仍然抱怨它“无法加载这样的文件——Calc (LoadError)”
那么,如何运行测试单元?我错过了什么?
预先感谢您的帮助。
更新:
按照 Blaine 的建议包含“.\Calc”后,我收到以下新错误消息:
好吧,至少这次它识别出了 Calc 类,并开始加载测试套件。