2014-12-02 66 views
1

我有沒有參數,返回本地IP地址哈希值的字符串形式的鍵與真正的價值很短的方法:如何使用MiniTest來模擬'套接字'方法?

def self.local_ips 
    # puts 'Getting ip addresses for this computer...' 
    local_ips = {} 
    Socket.ip_address_list.each do |address| 
    ip_string = address.ip_address 
    ip_string.sub!(/\%.*$/, '') # Removes interface from end of some IP's 
    local_ips[IPAddr.new(ip_string).to_s] = true 
    end 
    return local_ips 
end 

這正常工作,正確地被它定義正在按預期,但我想有一個測試這種方法的規範。問題是,Socket.ip_address_list將在每臺機器上返回不同的結果。我想知道在使用MiniTest來模擬Socket.ip_address_list的響應時是否有一種方法,以便可以在任何機器上測試該方法,而不用擔心由於與本地機器相關的差異而導致故障。

任何幫助將不勝感激。

謝謝!

回答

1

這不是嘲笑它需要使用,而是一個存根:

fake_ip = Struct.new :ip_address 
fake_ips = %w[ woot ] 

Socket.stub :ip_address_list, lambda { fake_ips.map { |s| fake_ip.new s } } do 
    Socket.ip_address_list.map { |ip| ip.ip_address } 
end 
# => ["woot"]