2

我上周刚开始学习 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 类,并开始加载测试套件。

4

1 回答 1

3

首先,如果程序说它找不到文件,让你的要求看起来像这样:require './Calc'

其次,确保您使用的是最新版本的 minitest gem。您可以通过以下方式检查:

gem list

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

gem install --version '4.6.1' (or whatever the version is)
于 2013-03-06T01:17:36.000 回答