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をインストールしても動きませんでした(「Ruby193\lib\ruby\gem\1.9.1\gems」にgemがインストールされていることを確認しました)。Ruby はまだ「そのようなファイルを読み込めません -- Calc (LoadError)」と不平を言っています。

では、テスト ユニットを実行するにはどうすればよいでしょうか。私は何が欠けていますか?

よろしくお願いいたします。

更新しました:

ブレインが提案したように「.\Calc」を含めた後、次の新しいエラーメッセージが表示されました。

ここに画像の説明を入力

少なくとも、今回は Calc クラスを認識し、テスト スイートのロードを開始しました。

4

1 に答える 1

3

まず、プログラムがファイルが見つからないと言った場合は、requireを次のようにします。require './Calc'

次に、最新バージョンのミニテストジェムを使用していることを確認します。これを確認するには、次のようにします。

gem list

バージョンはリストの右側にあります。今日の時点で、現在のバージョンは4.6.1です。バージョンが正しくない場合は、次のようにして更新してください。

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