2014-12-02 4 views
1

У меня есть короткий метод, который не принимает никаких аргументов и возвращает хэш локальных IP-адресов в виде строки в качестве ключей с истинным в качестве значения:Как мне высмеять метод «Socket» с помощью 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"] 
Смежные вопросы