测试类不会找到实例变量getter

时间:2017-03-24 22:34:10

标签: ruby-on-rails ruby

我是红宝石的新手!当我运行我的测试脚本时,它会引发异常:

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;

编辑:添加测试用例示例和清理

1 个答案:

答案 0 :(得分:1)

  

为什么找不到它?

因为你没有写它。您为名为num的方法编写了两个方法定义。由于你不能有两个同名的方法,第二个定义只会覆盖第一个。

请查看错误消息:它告诉您它正在寻找名为num=的方法。你的代码中没有这样的方法。

据推测,您的意思是第二个num方法被命名为num=。你需要重命名它:

def num=(value = 0)
  @num = value
end

请注意,带有默认值的可选参数在这里是无用的:无论如何,您无法在不带参数的情况下调用writer方法,您必须始终只提供一个参数。 (忽略反思。)