2

在 rspec 和类似的测试框架中,如何测试缺少方法?

我刚刚开始摆弄 rspec 和 bacon(rspec 的简化版本)。我想定义一个测试来确认一个类只允许对实例变量进行读取访问。所以我想要一个看起来像这样的类:

class Alpha
  attr_reader :readOnly

  #... some methods

end  

我很困惑:

  it "will provide read-only access to the readOnly variable" do
    # now what???
  end

我看不到提供的各种类型的测试如何测试访问器方法的缺失。我是红宝石和红宝石测试的菜鸟,所以我可能遗漏了一些简单的东西。

4

2 回答 2

5

在 Ruby 中,您可以使用 来检查对象是否响应方法obj.respond_to?(:method_name),因此使用 rspec,您可以使用:

Alpha.new.should_not respond_to(:readOnly=)

或者,由于类可以覆盖该respond_to?方法,因此您可以更严格,并通过实际调用它并断言它引发来确保没有赋值方法:

expect { Alpha.new.readOnly = 'foo' }.to raise_error(NoMethodError)

请参阅RSpec 期望以供参考。

于 2011-05-14T03:24:34.923 回答
2

我相信您正在寻找respond_to?,如some_object.respond_to? :some_method

于 2011-05-14T02:59:04.480 回答