2009-08-11 4 views
2

Ich habe so etwas fangen: „Sie schraubte den Hündchen“kann nicht eine Ausnahme in 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 

Aber aus irgendeinem Grund, mein Test ist die Erhöhung der Ausnahme und Stoppen der Ausführung statt zu kontrollieren es und Ausgeben Irgendeine Idee, warum das passiert und wie man es repariert?

Danke!

+0

Geschieht dies, wenn Sie außerhalb der Testcase 'c.make_car' tun? Es gibt "Sie schraubte den Hündchen" aus, wie es für mich sein sollte. – dbr

Antwort

11

Rettung ohne ein Argument ist kein "Catch-All" für Ausnahmen.

Wenn Sie nur eine "Rettung" ausstellen, wird nur eine StandardError-Ausnahme gerettet (die einen RuntimeError < StandardError abfängt), aber keine Ausnahme.

Wenn Sie wirklich alles fangen wollen, sollten Sie einen tun


rescue Exception 
+1

Was du sehr selten tun solltest: http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby – cbmanica

0

Ich bin zu 99% sicher, dass "in" ein geschütztes Schlüsselwort in Ruby ist. Versuchen Sie es mit einem anderen Variablennamen.

+0

Das ist es; für i in some_collection (...) –

+0

der Code oben ist nicht der genaue Code, nur etwas einfach genug, um die Idee zu demonstrieren. Ich benutze nicht "in" im eigentlichen Programm, so dass das nicht das Problem ist. Ich habe den Beitrag bearbeitet, um das widerzuspiegeln. – Tony

Verwandte Themen