我正在尝试围绕一个大量使用TCPSockets的应用程序编写测试(一个特定的IRC bot)。在写我的第一堂课时,我一直在努力:
#In the describe block
before(:all) { TCPServer.new 6667 }
...允许我的TCPSockets运行(通过连接到localhost:6667),尽管它们实际上没有被正确地模拟。但是,由于我无法在同一端口上创建TCPServer,因此在迁移到第二个类时会出现问题。
如何以这样的方式模拟TCPSocket类,以便我可以测试诸如its(:socket) { should be_kind_of(TCPSocket) }
之类的内容以及#readline和#write等其他常见操作?
答案 0 :(得分:3)
您可以尝试在之前跟踪和关闭TCPServer 和之后的:
before do
@server = TCPServer.new 6667
end
after do
@server.close
end
it ... do
end
it ... do
end
在每次单独测试之后,TCPServer都会被杀死,因此您可以使用相同的端口创建一个新的。
答案 1 :(得分:0)
我不太确定我是否了解您的问题,但为什么不在本地计算机上安装某种irc服务器? ircd-irc2,ircd-hybrid或类似的东西?
假设你有这样实现的irc客户端:
class Bot
attr_accessor :socket
def initialize
socket = TCPSocket.new("localhost", 6667)
end
end
然后你可以像这样测试它
let(:bot) { Bot.new }
it "should be kind of TCP Socket"
bot.should be_kind_of(TCPSocket)
bot.should be_a(TCPSocket)
end