使用Ruby 1.9.3进行单元测试

使用Ruby 1.9.3进行单元测试,ruby,Ruby,我上周才开始学习Ruby,所以请耐心听我说 我正在使用Ruby 1.9.3。我在尝试运行单元测试时遇到了问题,过去两天我一直在尝试,但我一直无法成功运行单元测试 下面是我的简单计算器类的代码: class Calc def initialize end def Add(leftOp, rightOp) return (leftOp + rightOp) end def Sub(leftOp, rightOp) return (leftOp - rightOp) end de

我上周才开始学习Ruby,所以请耐心听我说

我正在使用Ruby 1.9.3。我在尝试运行单元测试时遇到了问题,过去两天我一直在尝试,但我一直无法成功运行单元测试

下面是我的简单计算器类的代码:

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)
要求“测试/单元”
需要“测试/单元/ui/控制台/testrunner”
需要“计算”
类测试计算
当我运行这个单元测试时,它抛出了这个错误

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

在搜索了整个web之后,我了解到Test::Unit已被删除并替换为MiniTest(!)。因此,我尝试了以下最简单的方法:

require 'minitest/unit'
require 'Calc'
class Test_Calc < MiniTest::Unit::TestCase
    #Test_Calc definition
end
MiniTest::Unit.autorun
要求“小型测试/单元”
需要“计算”
类测试计算
我仍然得到了和以前完全相同的错误,所以也许我在做一些小测试的错误

我甚至在下面的网站上引用了这个例子,但在我的案例中似乎不起作用。即使我有一个完全定义的类(Calc.rb),我仍然得到了“Calc-(LoadError)”

在再次搜索整个web之后,我了解到test::unit作为向后兼容性的gem可用,因此我从以下链接下载并安装了test-unit-2.5.4.gem:

即使在安装了gem之后,它仍然无法工作(我检查以确保gem安装在“Ruby193\lib\ruby\gem\1.9.1\gems”中)。Ruby仍然抱怨它“无法加载这样的文件--Calc(LoadError)”

那么,如何运行测试单元呢?我错过了什么

提前感谢您的帮助

更新:

按照Blaine的建议包括“\Calc”后,我收到了以下新的错误消息:


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

首先,如果程序说找不到文件,请将require设置为:
require./Calc'

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

gem list
该版本将位于列表的右侧。目前的版本是4.6.1。如果您的版本不正确,请执行以下操作进行更新:

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

您是否尝试过
require./Calc'
不要发布文本图像,而是直接将实际文本复制并粘贴到您的帖子中。文本图像不容易解析、搜索或访问。同意w/@AndrewMarshall:TATN,你让你的问题无法用谷歌搜索(至少是错误消息部分),这太可惜了。你的意思是我错过了require语句的换行符?我有3行不同的require语句。不,我有一个类似的问题,我必须包括
/filename
,所以基本上尝试将
/
放在
calc
之前,以获得
/calc
。另外,在结果之前添加
@
符号。看看我的最新答案。哦,你是说@。明白了。我也试过了,还有“/Calc”,但没用。然而,它带来了一个不同的错误消息。我很快会在我的原始帖子中发布新错误消息的屏幕截图。请参阅我的更新代码。我认为你的新问题是因为
测试div\u Zero
。您的字符串周围应该有“”。