لماذا أحصل على استثناء "عدد خاطئ من الوسائط (0 لـ 2)" في رمز روبي الخاص بي؟
-
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
تتوقع الطريقة رمزًا يحدد اسم الطريقة، لكنك تحاول استخدام متغير مثيل.
وأيضاً لا ينبغي أن تكون الأسطر هكذا:
puts "test was run? (true expected): #{test.wasRun}"
يكون:
puts "test was run? (true expected): #{@test.wasRun}"
?
لا تنتمي إلى StackOverflow