لماذا أحصل على استثناء "عدد خاطئ من الوسائط (0 لـ 2)" في رمز روبي الخاص بي؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أحاول تحسين روبي من خلال إعادة كتابة مثال xUnit Python الخاص بـ Kent Beck من "التطوير القائم على الاختبار:على سبيل المثال".لقد قطعت شوطًا طويلاً ولكني الآن أتلقى الخطأ التالي عندما أقوم بالركض وهو ما لا أزعجه.

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

الكود الخاص بي يبدو كالتالي:

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

هل يمكن لأحد أن يشير إلى خطأي الواضح؟

هل كانت مفيدة؟

المحلول

إنه بيان الطباعة الخاص بك:

  puts "test was run? (true expected): #{test.wasRun}"

يجب ان يكون

  puts "test was run? (true expected): #{@test.wasRun}"

بدون "@" فإنك تتصل بـ Kernel#test، الذي يتوقع متغيرين.

نصائح أخرى

الشيء الوحيد الذي يقفز هو أن send تتوقع الطريقة رمزًا يحدد اسم الطريقة، لكنك تحاول استخدام متغير مثيل.

Object.send الوثائق

وأيضاً لا ينبغي أن تكون الأسطر هكذا:

puts "test was run? (true expected): #{test.wasRun}"

يكون:

puts "test was run? (true expected): #{@test.wasRun}"

?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top