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 Expectationsを参照してください。

于 2011-05-14T03:24:34.923 に答える
2

respond_to?のようにを探していると思いますsome_object.respond_to? :some_method

于 2011-05-14T02:59:04.480 に答える