Pourquoi ai-je un & # 8220; nombre incorrect d'arguments (0 pour 2) & # 8221; exception dans mon code Ruby?
-
02-07-2019 - |
Question
J'essaie de peaufiner mon Ruby en réécrivant l'exemple xUnit Python de Kent Beck dans "Test Driven Development: By Example". J'ai assez loin, mais maintenant, quand je cours, je reçois le message d'erreur suivant: je ne le fais pas.
C:\Documents and Settings\aharmel\My Documents\My Workspace\TDD_Book\TDDBook_xUnit_RubyVersion\lib\main.rb:21:in `test_running': wrong number of arguments (0 for 2) (ArgumentError)
from C:\Documents and Settings\aharmel\My Documents\My Workspace\TDD_Book\TDDBook_xUnit_RubyVersion\lib\main.rb:21:in `run'
from C:\Documents and Settings\aharmel\My Documents\My Workspace\TDD_Book\TDDBook_xUnit_RubyVersion\lib\main.rb:85
Mon code ressemble à ceci:
class TestCase
def initialize(name)
puts "1. inside TestCase.initialise: @name: #{name}"
@name = name
end
def set_up
# No implementation (but present to be overridden in WasRun)
end
def run
self.set_up
self.send @name # <<<<<<<<<<<<<<<<<<<<<<<<<= ERROR HERE!!!!!!
end
end
class WasRun < TestCase
attr_accessor :wasRun
attr_accessor :wasSetUp
def initialize(name)
super(name)
end
def set_up
@wasRun = false
@wasSetUp = true
end
def test_method
@wasRun = true
end
end
class TestCaseTest < TestCase
def set_up
@test = WasRun.new("test_method")
end
def test_running
@test.run
puts "test was run? (true expected): #{test.wasRun}"
end
def test_set_up
@test.run
puts "test was set up? (true expected): #{test.wasSetUp}"
end
end
TestCaseTest.new("test_running").run
Quelqu'un peut-il signaler mon erreur évidente?
La solution
Il s’agit de votre déclaration d’impression:
puts "test was run? (true expected): #{test.wasRun}"
devrait être
puts "test was run? (true expected): #{@test.wasRun}"
sans le '@' que vous appelez Kernel # test, qui attend 2 variables.
Autres conseils
Une chose qui saute aux yeux est que la méthode send
attend un symbole identifiant le nom de la méthode, mais que vous essayez d'utiliser une variable d'instance.
De même, les lignes comme celle-ci ne devraient-elles pas:
puts "test was run? (true expected): #{test.wasRun}"
être:
puts "test was run? (true expected): #{@test.wasRun}"
?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow