使用Ruby 1.9.3进行单元测试

时间:2013-03-06 01:07:48

标签: ruby

我上周刚开始学习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)

当我运行此单元测试时,它会吐出此错误

enter image description here

Calc.rb文件位于test_Calc.rb文件的同一目录中。为什么不看呢?我甚至试图将Calc.rb文件复制到“custom_require.rb”文件的相同目录(“lib / ruby​​ / site_ruby / 1.9.1 / ruby​​gems”),但这没有帮助。

在网上搜索后,我了解到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”之后,我收到以下新错误消息:

enter image description here

嗯,至少,这次它识别出Calc类,并开始加载测试套件。

1 个答案:

答案 0 :(得分:3)

首先,如果程序说无法找到该文件,请将您的要求设为:require './Calc'

其次,请确保您使用的是最新版本的minitest gem。您可以通过执行以下操作来检查:

gem list

该版本将位于列表右侧。截至今天,当前版本为4.6.1。如果您的版本不正确,请执行以下操作进行更新:

gem install --version '4.6.1' (or whatever the version is)