class MockReminderTimingInfoParser < ReminderTimingInfoParser
def new(blank)
ReminderTimingInfoParserForTest.new
end
end
Здесь вы определяете метод с именем new
для всех экземпляров класса MockReminderTimingInfoParser
. В своем вопросе вы упоминаете, что хотите подключиться к созданию экземпляра. Однако в Ruby создание экземпляра не выполняется методами экземпляра. Очевидно, что это не может работать, так как для вызова метода экземпляра сначала нужно иметь экземпляр!
Вместо этого экземпляры создаются путем вызова фабричного метода (обычно называемого new
) в классе.
Другими словами, чтобы создать экземпляр MockReminderTimingInfoParser
, вы должны вызвать MockReminderTimingInfoParser.new
, но вы определили метод MockReminderTimingInfoParser#new
. Чтобы вызвать метод, который вы определили, вам нужно вызвать MockReminderTimingInfoParser.new.new
.
Вам необходимо определить метод для одноэлементного класса MockReminderTimingInfoParser
. Есть несколько способов сделать это. Одним из способов было бы просто подражать так, как вы бы вызывали метод:
def MockReminderTimingInfoParser.new(blank)
ReminderTimingInfoParserForTest.new
end
Еще один откроет синглтон-класс MockReminderTimingInfoParser
:
class << MockReminderTimingInfoParser
def new(blank)
ReminderTimingInfoParserForTest.new
end
end
Однако, в обоих этих случаях MockReminderTimingInfoParser
, очевидно, должен существовать первым. Учитывая, что вам все равно нужно определить класс, вот самый идиоматический способ определения методов в синглтон-классе класса (или модуля):
class MockReminderTimingInfoParser < ReminderTimingInfoParser
def self.new(blank)
ReminderTimingInfoParserForTest.new
end
end