Заполнение переменных экземпляра в тестах rspec

У меня есть класс, который имеет следующий метод инициализации.

def initialize(my_var)
  @my_var = my_var
end

и я хочу протестировать метод, который затем что-то делает с @my_var

def split
  @my_var.split(",")
end

как изменить @my_var перед проверкой правильности возврата массива?

Возможно ли это без доступа к @my_var?


person Joseph Le Brech    schedule 25.10.2012    source источник


Ответы (1)


Это не похоже на правильную практику. Rspec должен тестировать поведение интерфейса ваших классов и моделей, а не внутреннюю реализацию (которой, несомненно, являются переменные экземпляра). Есть способы сделать это, но вы уверены, что не хотите иметь метод доступа для этой переменной?

В любом случае, вы можете использовать my_object.instance_variable_get("@my_var") и my_object.instance_variable_set("@my_var", value) для управления переменной.

person PinnyM    schedule 25.10.2012
comment
причина, по которой я это делаю, заключается в том, что мой метод инициализации читает из файла, я пытаюсь сделать заглушку File и записать ожидаемые обработанные данные из этого файла, не нуждаясь в файле для поддержки моих тестов. Затем я могу пропустить этот метод инициализации для тестирования любых других методов в моем классе. - person Joseph Le Brech; 25.10.2012
comment
@JosephLeBrech, вы также можете попробовать использовать StringIO вместо файла - person faron; 28.08.2014