2009-08-11 22 views
2

で例外をキャッチすることができません:「あなたは犬をねじ込み」私はこのような何か持っているRubyの

class Vehicle 

    def self.set_color(input) 
    if %w{blue red green}.include?(input) 
     input 
    else 
     raise "Bad color" 
    end 
    end 

end 

class Car < Vehicle 

    def make_car 
     begin 
     my_color = Vehicle.set_color("orange") 
     rescue 
     puts "you screwed the pooch" 
     end 
    end 

end 

class CarTest < Test::Unit::TestCase 
    def test_number_one 
    c = Car.new 
    c.make_car 
    end 
end 

をしかし、何らかの理由で、私のテストは、例外を発生し、それをキャッチして出力するのではなく、実行を停止していますなぜこれが起こっているか、それを修正する方法は?

ありがとうございます!

+0

すればよいですか?それはあなたが私のためにすべきであるように "あなたは犬をねじ込んだ"と出力します.. – dbr

答えて

11

引数のないレスキューは、例外の「キャッチオール」ではありません。

"レスキュー"を発行しただけでは、例外ではなくStandardError例外(RuntimeError < StandardErrorをキャッチします)を救済します。

あなたが本当にすべてをキャッチしたい場合、あなたはテストケースの外 `c.make_car`をすれば、この現象が発生してい


rescue Exception 
+1

を反映するために投稿を編集しました:http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby – cbmanica

0

私は99%確信しています "in"はrubyの保護されたキーワードです。別の変数名を使用してみてください。

+0

それはそうです; some_collection(...)のiのために –

+0

上記のコードは正確なコードではなく、アイデアを示すのに十分な単純なものです。実際のプログラムでは "in"を使用しないので、それは問題ではありません。私は非常にまれに行うべきである – Tony

関連する問題