Я пытаюсь использовать rspec вместе с MacRuby для тестирования платформы, написанной на Objective-C.
Однако, кажется, невозможно заглушить определенные селекторы, используя этот подход. Например:
Foo.stub(:currentSession).and_return(double("session"))
Результат:
RuntimeError:
cannot remove method `obfuscated_by_rspec_mocks__currentSession' because it is a native method
# /Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/Gems/1.9.2/gems/rspec-mocks-2.8.0/lib/rspec/mocks/method_double.rb:108:in `block'
Также не представляется возможным заглушить селектор, который принимает несколько аргументов, и обеспечить реализацию, например, попытаться заглушить setObject:forKey:
на NSMutableDictionary
, например:
NSMutableDictionary.any_instance.stub(:setObject) do |*args|
puts *args
end
Ничего не делает.
Я пробовал различные комбинации версий MacRuby и rspec (MacRuby 0.10, 0.11 и rspec 2.5 и 2.8), и поведение кажется одинаковым. Я также безуспешно пытался указать варианты имени селектора, такие как:: setObject: forKey и т. Д.
Это ошибка или просто ограничение rspec и macruby? Есть ли способ обойти это?