0
我有以下代碼(國際象棋的實現,我經歷theodinproject.com路徑):最好的測試方法的方法從初始化運行使用RSpec
class Move
def initialize(player, board)
@player = player
@board = board
@from = ask_for_move_details("from")
@from_sq = @board[@from.to_sym]
@from_piece = @from_sq[:piece]
@to = ask_for_move_details("to")
@to_sq = @board[@to.to_sym]
make_a_move if move_allowed?
end
def ask_for_move_details(from_or_to)
begin
msg_ask_for_move_details(@player, from_or_to)
chosen_address = gets.chomp.to_s
raise unless address_valid?(chosen_address)
rescue
msg_move_not_allowed
retry
end
chosen_address
end
...
end
我需要測試其運行時ask_for_move_details("from"/"to")
方法對象實例正在創建中。
目標是例如使@from
變量得到值"a1"
和@to
變量得到"a6"
值。到目前爲止,我想出了只有這個:
allow(Move).to receive(:gets).and_return("a1", "a6")
,但它不工作,因爲@from
得到零值,測試失敗。
我知道初始化方法根本不應該被測試,但是這種情況使得不可能創建對象的實例並因此測試它的方法。我應該重構代碼嗎?
這工作!非常感謝 :) – sloneorzeszki