2011-09-09 23 views
1

我使用net/http来维护一些处理远程文件的Ruby宝石。在Ruby中为单元测试创​​建一个虚拟服务器

我目前的单元测试设置包括在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。创建虚拟HTTP服务器以用于Test::Unit测试的最佳做法是什么?

回答

4

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

您还可以使用webmockfakeweb宝石。

+1

webmock是完美的,谢谢。 –

相关问题