我一直在学习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方法,而不是模拟?那就够了吗?
提前致谢。
答案 0 :(得分:0)
在进行IO测试时,我喜欢使用StringIO:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html
当你依赖像select这样的低级方法时,我认为模拟或删除这些部分并不是一个好主意。你不会得到任何形式的东西。尝试在你的测试中做真实的东西,但重构其中的所有逻辑,这样你就可以进行正常的测试。