我维护了一些使用 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
。
关于ruby - 在 Ruby 中创建用于单元测试的虚拟服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366417/