¿Por qué recibo una excepción de "número incorrecto de argumentos (0 por 2)" en mi Código Ruby?

StackOverflow https://stackoverflow.com/questions/116626

  •  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?

¿Fue útil?

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.

Objeto.enviar documentación

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
scroll top