Я пишу тесты для системы, моделирующей лифт. Например, я хочу проверить, что лифт может менять направление и двигаться на указанный этаж.
У меня есть следующие методы:
def initialize
@current_floor = 0
@requested_floor = 0
end
def get_value
gets.chomp
end
def arrival
print "Enter floor number: "
@requested_floor = get_value
# only proceed if user entered an integer
if validate_floor_number(@requested_floor)
@requested_floor = @requested_floor.to_i
move
else
arrival
end
end
def move
msg = ""
@current_floor < @requested_floor ? msg = "Going Up!" : msg = "Going Down"
puts msg
@current_floor = @requested_floor
next_move
end
def next_move
puts "Do you want to go to another floor? Y/N"
another_floor = (get_value).upcase
another_floor == 'N' ? final_destination : arrival
end
Я запускаю программу, вызывая Elevator.new.arrival
. Чтобы убедиться, что лифт изменил направление, мне нужно сохранить значение @current_floor
во временной переменной, а затем проверить, изменилось ли это значение после вызова move
.
Я тестирую ввод с консоли с помощью канала ввода-вывода благодаря ответам в этот вопрос, но я не уверен, как применить эти знания к взаимодействию с пользователем, которое является частью метода.
Как я могу смоделировать программу, работающую с самого начала (Elevator.new.arrival
), через метод move
и остановить ее там, чтобы я мог проверить значение @current_floor
— и все это без запуска самой программы и использования канала ввода-вывода для имитации взаимодействия с пользователем?
У меня есть ощущение, что я мог неправильно подойти к разработке программы. Если кто-нибудь может даже указать мне правильное направление для решения этой проблемы, я был бы признателен.
Изменить
В соответствии с предложениями Wand Maker я написал тест следующим образом:
describe "checks that the elevator can change directions" do
before do
moves = [3, 'Y', 5, 'Y', 2, 'Y', 7, 'N']
def get_value; moves.next end
end
it "should stop on floor 7" do
Elevator.new.arrival
assert_equal(@current_floor, 7)
end
end
К сожалению, когда я запускаю свой тестовый файл, программа все еще работает и запрашивает ввод данных пользователем. Возможно, я неправильно называю arrival
, но другого способа придумать не могу.
get_value
? Возможно, вам следует открыть класс и перезаписать его. - person Wand Maker   schedule 22.11.2015