在Ruby中为单元测试创​​建虚拟服务器

时间:2011-09-09 19:16:11

标签: ruby unit-testing http testing

我维护了一些使用net/http处理远程文件的Ruby gem。

我当前的单元测试设置包括使用setup方法启动WEBrick服务器,然后在teardown中将其终止。

def setup
  return if @server_thread
  @server_thread = Thread.new do
    s = WEBrick::HTTPServer.new(:Port => 12000, :DocumentRoot => www_root, :Logger => Log.new(nil, BasicLog::ERROR), :AccessLog => [])
    port = s.config[:Port]
    begin
      s.start
    ensure
      s.shutdown
    end
  end
end

使用Ruby 1.9.2和1.9.3我遇到了一堆连接错误 - Errno::ECONNREFUSED: Connection refused - connect(2)。更令人沮丧的是,它们是短暂的 - 有时它们会发生,有时则不会发生。我所能想到的是,WEBrick要么被淹没,要么首先没有正确设置。

我需要能够通过HTTP加载多个静态文件(在我的fixtures目录中)来测试这些gem。在Test::Unit测试中创建虚拟HTTP服务器的最佳实践是什么?

1 个答案:

答案 0 :(得分:4)

我会模拟net/http类来返回静态文件内容。使用依赖注入,以便被测试的类在单元测试执行期间使用模拟,在生产中使用net/http

您还可以使用webmockfakeweb宝石。