2011-09-09 65 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是完美的,謝謝。 –

相關問題