Pourquoi ai-je un & # 8220; nombre incorrect d'arguments (0 pour 2) & # 8221; exception dans mon code Ruby?

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

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

Était-ce utile?

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.

documentation Object.send

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