Ruby Testing: тестирование на отсутствие метода - PullRequest
2 голосов
/ 14 мая 2011

В rspec и аналогичных средах тестирования, как можно проверить отсутствие метода?

Я только начал возиться с rspec и беконом (упрощенная версия rspec.) Я хотел определить testэто подтвердило бы, что класс разрешает доступ только на чтение к переменной экземпляра.Поэтому я хочу класс, который выглядит следующим образом:

class Alpha
  attr_reader :readOnly

  #... some methods

end  

Я довольно озадачен:

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

Я не вижу, как различные типы предоставляемых тестов могут проверять отсутствиеметод доступа.Я новичок в тестировании ruby ​​и ruby, поэтому я, вероятно, упускаю что-то простое.

Ответы [ 2 ]

5 голосов
/ 14 мая 2011

В 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 для справки.

2 голосов
/ 14 мая 2011

Я полагаю, вы ищете respond_to?, как в some_object.respond_to? :some_method.

...