我是红宝石的新手!当我运行我的测试脚本时,它会引发异常:
NoMethodError:未定义的方法`num ='为# 你的意思是? NUM
为什么找不到它?谢谢!
这是我的班级
class FizzBuzz
def initialize(num = 0)
@num = num
@fb = 'FizzBuzz'
post_init
end
def post_init
nil
end
def num
@num
end
def fb
@fb
end
def num(value = 0)
@num = value
end
def fb(value = 0)
@fb = value
end
end
以下是测试用例
的示例 def setup
@obj = FizzBuzz.new()
end
#Test multiple of 3 results in instance attribute fb being set to Fizz
def test_fb_three
@obj.num = 42
assert_equal "Fizz", @obj.fb, "Incorrect value for fb.\nExpected\"Fizz\" got \"#{@obj.fb}\""
end
这是堆栈跟踪:
NoMethodError:未定义的方法num=' for #<FizzBuzz:0x33b46a8 @num=0, @fb="FizzBuzz">
Did you mean? num
C:/Users/frase/RubymineProjects/HW/test_hw4.rb:54:in
test_fb_three&#39;
(eval):12:run'
C:/Program Files (x86)/JetBrains/RubyMine 2017.1/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:93:in
start_mediator&#39;
C:/ Program Files(x86)/ JetBrains / RubyMine 2017.1 / rb / testing / patch / testunit / test / unit / ui / teamcity / testrunner.rb:81:in start&#39;
编辑:添加测试用例示例和清理
答案 0 :(得分:1)
为什么找不到它?
因为你没有写它。您为名为num
的方法编写了两个方法定义。由于你不能有两个同名的方法,第二个定义只会覆盖第一个。
请查看错误消息:它告诉您它正在寻找名为num=
的方法。你的代码中没有这样的方法。
据推测,您的意思是第二个num
方法被命名为num=
。你需要重命名它:
def num=(value = 0)
@num = value
end
请注意,带有默认值的可选参数在这里是无用的:无论如何,您无法在不带参数的情况下调用writer方法,您必须始终只提供一个参数。 (忽略反思。)