ruby - 在 Ruby 中创建用于单元测试的虚拟服务器

标签 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 服务器的最佳做法是什么?

最佳答案

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

您还可以使用 webmockfakeweb gem 。

关于ruby - 在 Ruby 中创建用于单元测试的虚拟服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366417/

相关文章:

ruby-on-rails - Welcome#index 中没有方法错误

javascript - Rails Strong Params 无法识别通过 Ajax Post 发送的参数

objective-c - OCUnit 测试在未测试的类中给出错误

java - Mule - 重试与基本流程的连接

ruby - 在 Ruby 中定义 String#prev 方法

ruby-on-rails - 在 Ruby 中检测上传文件的 MIME 类型

python - 通过 nose 或 pytest 在 Python 的单元测试中集成 argparse 脚本的建议

java - 测试模块中的文件夹结构

http - 保持事件请求 _change 连续供稿

http - 用于字节 blob 的 HTTP "content-type"是什么?