Я расширяю существующую библиотеку, создавая дочерний класс, который распространяется на класс библиотеки.Как я могу высмеять супер в ruby с помощью rspec?
В классе ребенка я смог протестировать большую часть функциональности в методе initialize
, но не смог высмеять super
. Детский класс выглядит примерно так.
class Child < SomeLibrary
def initialize(arg)
validate_arg(arg)
do_something
super(arg)
end
def validate_arg(arg)
# do the validation
end
def do_something
@setup = true
end
end
Как я могу написать RSpec тест (с мокко), что я могу издеваться super
вызов? Обратите внимание, что я тестирую функциональность метода initialize
в классе Child
. Должен ли я создавать отдельный путь кода, который не вызывает super
, когда ему предоставляется дополнительный аргумент?
Означает ли это, я не могу писать RSpec тест для инициализации? Является ли плохой практикой писать модульный тест для метода инициализации? Кстати, я расширяю библиотеку соединителей базы данных. Если я не пишу модульный тест, но напишу интеграционный тест, я просто думаю, что это странно, если для проверки rspec требуется подключение к реальной базе данных. –
Мне не имеет смысла, почему мы не можем высмеивать супер. Кажется полезным сделать это, чтобы правильно протестировать поведение инициализации в изоляции, и, несомненно, супер - это сообщение, отправленное в экземпляр класса, нет? –
Нет, 'super' - _not_ сообщение, отправленное экземпляру класса. Я не знаю никаких конструкций метапрограммирования ruby, которые бы сделали это возможным, и даже если бы это было так, я все еще не убежден, что это хорошая идея. –