2

我正在尝试围绕一个大量使用 TCPSockets(具体来说是 IRC 机器人)的应用程序编写测试。在编写我的第一堂课的测试时,我一直在做以下事情:

#In the describe block
before(:all) { TCPServer.new 6667 }

...这允许我的 TCPSockets 运行(通过连接到 localhost:6667),尽管它们实际上并没有被正确地模拟。但是,当我转到第二类时,这会导致问题,因为我无法在同一端口上创建 TCPServer。

如何模拟 TCPSocket 类以允许我测试诸如its(:socket) { should be_kind_of(TCPSocket) }#readline 和#write 等其他常见操作之类的东西?

4

2 回答 2

3

您可以尝试在之前之后跟踪并关闭 TCPServer :

before do
  @server = TCPServer.new 6667
end

after do
  @server.close
end

it ... do
end

it ... do
end

在每个单独的测试之后,TCPServer 被终止,因此您可以创建一个具有相同端口的新服务器。

于 2013-01-28T23:02:57.260 回答
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
于 2013-01-28T10:13:11.490 回答