¿Por qué recibo una excepción de "número incorrecto de argumentos (0 por 2)" en mi Código Ruby?
-
02-07-2019 - |
Pregunta
Estoy tratando de pulir mi Ruby reescribiendo el ejemplo xUnit Python de Kent Beck de "Desarrollo basado en pruebas:Por ejemplo".Llegué bastante lejos, pero ahora aparece el siguiente error cuando lo ejecuto y no lo asimilo.
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
Mi código se ve así:
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
¿Alguien puede señalar mi error obvio?
Solución
Es su declaración impresa:
puts "test was run? (true expected): #{test.wasRun}"
debiera ser
puts "test was run? (true expected): #{@test.wasRun}"
sin '@' estás llamando a Kernel#test, que espera 2 variables.
Otros consejos
Una cosa que salta a la vista es que el send
El método espera un símbolo que identifique el nombre del método, pero estás intentando utilizar una variable de instancia.
Además, ¿no deberían líneas como esta?
puts "test was run? (true expected): #{test.wasRun}"
ser:
puts "test was run? (true expected): #{@test.wasRun}"
?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow