我一直在学习 Ruby,遇到了一个问题。我正在建造一个战舰游戏来学习语言。
游戏将 2 个输入和 2 个输出流带入构造函数(允许两个客户端从同一个终端玩,都来自网络连接,或者每个客户端一个)
这对游戏本身来说很好,但是因为我也在练习以测试驱动的开发方式工作。这导致了一个问题——为了测试(rspec)我模拟了一个输入和输出的 IO 对象
@outputIO = mock("io")
@inputIO = mock("io")
这对大部分工作都很有效,但是某些部分需要使用 select 命令,以便两个玩家可以同时输入信息:
result = select([@p1_input,@p2_input], nil, nil)
for r in result[0]
if r == @p1_input || r == @p2_input
input = r
end
end
@p1_input 和 @p2_input 在构造函数中设置。运行 rspec 测试时,我得到:
TypeError: can't convert RSpec::Mocks::Mock into IO
如何模拟 IO 以使其正常运行?我应该创建一个新的 IO 实例并覆盖 gets 方法,而不是模拟?这样就够了吗?
提前致谢。