Minitest Fehler - ArgumentError: falsche Anzahl von Argumenten (1, erwartete 0)
Mache ich eine übung auf exercism.io. Dieser Wunsch in der Spec-Dokument:
- Die
Hello World!
Programm GRÜßEN mich, der Anrufer. - Wenn ich dem Programm sagen, mein name ist Alice, Sie begrüßen mich mit den Worten "Hallo, Alice!".
- Wenn ich zu vernachlässigen, dass es mein name, Sie werden mich begrüßen mit den Worten "Hello, World!"
class HelloWorldTest < Minitest::Test
def test_no_name
assert_equal 'Hello, World!', HelloWorld.hello
end
def test_sample_name
assert_equal 'Hello, Alice!', HelloWorld.hello('Alice')
end
def test_other_sample_name
assert_equal 'Hello, Bob!', HelloWorld.hello('Bob')
end
end
Dies ist mein Programm:
class HelloWorld
def self.hello
"Hello, World!"
end
def initialize(name)
@name = name
end
def say_hello
puts "Hello, #{@name}!"
end
end
print "Give me your name: "
your_name = gets.chomp
hello = HelloWorld.new(your_name)
if your_name == ""
puts "Hello, World!"
else
hello.say_hello
end
Das Programm läuft und erfüllt alle Anforderungen, aber ich bekomme die Fehlermeldung:
1) Error:
HelloWorldTest#test_sample_name:
ArgumentError: wrong number of arguments (given 1, expected 0)
/Users/drempel/exercism/ruby/hello-world/hello_world.rb:3:in `hello'
hello_world_test.rb:24:in `test_sample_name'
3 runs, 1 assertions, 0 failures, 1 errors, 1 skips
Wie definiere ich eine Methode, die keine Argumente erforderlich sind?
InformationsquelleAutor Dan Rempel | 2016-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Manchmal in einem test, den Sie sagen
Andere mal in einem test, den Sie sagen
Du bist also der Aufruf der Methode "hello", mit und ohne Argumente.
Machen die Argumente optional sind, können Sie geben Sie einen default-Wert.
Genau, also das lernen aus dem test ist, wie können Sie rufen Sie die gleiche Methode, mit und ohne Argumente, die ein gutes lernen. Das meiste, was Sie in Ihrer Lösung, die Sie nicht brauchen (im moment)... das initialisieren und die
say_hello
und die Erstellung des neuen Objekts. In der Regel ist es am besten NICHT zu-code-Sachen, bis Sie es brauchen, eine Prüfung zu bestehen.Das macht Sinn, danke Steve. Basierend auf meine bisherigen Erfahrungen, dass war die einzige Art, wie ich fühlte, ich konnte erreichen das Ziel. Definieren Sie einen Standardwert für das argument viel Sinn macht!
InformationsquelleAutor SteveTurczyn
Dein problem ist das Gegenteil. Sie übergeben ein argument für eine Methode
HelloWorld.hello
, die nicht ein argument.Ihre test-code nicht mit dem übereinstimmen, was dein Quelltext macht. Entweder ändern Sie Ihren source-code:
Hier, die
name = "World"
zeigt an, dass diename
argument ist optional, und der Standardwert ist"World"
.Oder, ändern Sie Ihre tests an:
Okay, antwortete ich, die übung für Sie.
Das ist großartig, wie gut. Danke!!! Dein Beispiel ist ein wenig einfacher für mich zu wickeln meinem Kopf herum. Die Zuweisung einer default-Wert zu Welt Sinn macht.
Ja, gute Lösung!
Das ist sicherlich die beste und richtige Antwort... Es bietet einen schönen Blick bereits, wie unterschiedlich der Klasse und Instanz-Methoden Verhalten sich...
InformationsquelleAutor sawa
Es ist wichtig zu verstehen, was die Fehlermeldung bedeutet, ich hatte ein ähnliches problem auf Lernen.co Objekt-Orientierte TicTacToe challenge. Wenn dein code lief gegen den test von code, der test-code ist "geben" ein argument des
'Alice'
zu den#self.hello
Methode. Aber Ihr#self.hello
Methode, wie geschrieben, erwarte genau null Argumente. Daher:Meine Fehlermeldung war ähnlich und ich hatte den gleichen Gedankengang: "Wenn es zu erwarten 0, wie kann ich ihm 0?" Klar, ein Schlüssel zum mitnehmen aus unserer Erfahrung ist es besser verstehen Sie jetzt, was die Fehlermeldung bedeutete.
InformationsquelleAutor chemturion