Ruby Koan: test_nil_is_an_object
Ich vor kurzem versucht haben, schärfen meine rails-skills mit diesem tool:
http://github.com/edgecase/ruby_koans
aber ich habe Probleme bei der übergabe einige tests. Auch ich bin nicht sicher, wenn ich einige Dinge zu tun korrekt, da das Ziel ist, nur um den test zu bestehen, gibt es eine Menge von Möglichkeiten, im Vorbeigehen, und ich kann etwas tun, das nicht bis zu standards.
Gibt es eine Möglichkeit, um zu bestätigen, wenn ich die Dinge richtig tun?
einem konkreten Beispiel:
in about_nil,
def test_nil_is_an_object
assert_equal __, nil.is_a?(Object), "Unlike NULL in other languages"
end
so ist es mir zu sagen um zu überprüfen ob, die zweite Ziffer ist gleich ein Objekt(also ich kann sagen, dass null ein Objekt ist) oder einfach nur assert_equal true, nil.is_a?(Object)
weil die Aussage wahr ist?
und der nächste test:
def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil
# What happens when you call a method that doesn't exist. The
# following begin/rescue/end code block captures the exception and
# make some assertions about it.
begin
nil.some_method_nil_doesnt_know_about
rescue Exception => ex
# What exception has been caught?
assert_equal __, ex.class
# What message was attached to the exception?
# (HINT: replace __ with part of the error message.)
assert_match(/__/, ex.message)
end
end
Ich vermute, ich sollte ein "No-Methode Fehler" string in der assert_match, aber was ist mit den assert_equal?
- Interessant, wusste nicht, über die koans, gotta versuchen, Sie. Vielleicht um Hilfe zu bitten, oder auf der Suche nach Beratung über Dinge, die Sie nicht denken, haben Recht, aber, die spezifischer sind, erhalten Sie bessere Antworten
Du musst angemeldet sein, um einen Kommentar abzugeben.
assert_equal true, nil.is_a?(Object)
ist in der Tat die richtige Lösung. Die Frage ist, "Sind nils in Ruby-Objekte oder nicht?", und in Ruby ' s Fall, Sie sind. So, um die Behauptung, Sie sollten behaupten, die Wahrheit zu testen.Im zweiten Beispiel, wenn Sie eine nicht definierte Methode auf null, erhalten Sie
NoMethodError: undefined method 'foo' for nil:NilClass
. So, die exception-Klasse istNoMethodError
, und die Nachricht istundefined method 'foo' for nil:NilClass
. Testen Sie den fehlerhaften Verhalten in einer Konsole, und sehen, was Sie von ihm bekommen, und dann wenden Sie dieses wissen auf den Prüfstand stellen.Sind Sie
in der Eingabeaufforderung, nachdem Sie jede richtige test? Es wird Ihnen eine Menge helfen.
Auch "denken Sie daran, dass schweigen manchmal die beste Antwort" -- wenn Sie sind ratlos, weiß nicht, in nichts und das tool wird Ihnen helfen.
Gut, halten mit den typischen TDD-motto von Rot-Grün-Refactoring sollten Sie den test ausführen (wahrscheinlich mit Harke in einer separaten Konsole) und sehen die Fehler passieren. Von dort aus haben Sie, sofern Sie ein paar Stücke von Informationen über das, was erwartet wurde.
Als für den Stil, die koans sind nicht wirklich eine Lehre. Man sollte Sie nur finden und Lesen Sie einige code, geschrieben in ruby, um ein Gefühl für die typischen Konventionen und Ausdrucksweisen, der ruby-community.
rake
auf?Einfachheit ist der Schlüssel mit Ruby Koans - wenn ich es gestartet habe, dachte ich, es muss schwieriger sein, als das, was es ist, aber es ist nicht! Fragen Sie einfach IRB die Frage Koans fragt Sie, und nach ein paar Sie bekommen ein Gefühl für Sie. Ich habe eine schriftliche blog-Stück über, um anderen zu helfen, auch:
Ruby Koans Antworten
Ich erinnere mich, als ich dies Tat, dass ich versuchte zu denken den test und versucht, in
Die Sache zu erinnern ist, dass die tatsächliche Klasse nicht haben, um in einem string oder so etwas.
Die Antwort ist also NICHT
Wie oben angedeutet, setzen Sie den code in der irb-und ausführen.
ist ein großer Hinweis