【发布时间】:2015-04-16 09:04:16
【问题描述】:
我正在用 Ruby 编写 Mastermind 游戏,在“游戏”类的构造函数中,我想使用 gets.chomp 向用户询问其名称。很简单,但是我遇到麻烦的地方是在 RSpec 中测试这个类时,但我似乎无法正确地排除“gets”和“puts”,因为它们在构造函数中而不是常规方法。
class Game
def initialize
puts "Please enter your name:"
@player = Player.new(gets.chomp)
end
end
describe Game do
Game.stub(:gets).and_return("Create Code AI")
Game.stub(:puts)
subject(:game) { Game.new }
describe "#new" do
its("player.name") { eql("Create Code AI") }
end
end
class Player
attr_reader :name
def initialize(name)
@name = name
end
end
我还尝试将存根放入“之前”和“让”块中,但似乎没有任何效果。任何帮助表示赞赏!
【问题讨论】:
-
虽然这当然是可能的,但您应该考虑重构您的代码。如果您可以在不存根
gets和puts的情况下初始化Game,那会不会容易得多? -
我认为这是最好的方法,是的,谢谢!下面的答案虽然很可能是正确的,但对于我正在做的事情来说似乎太复杂了。