我有一个不带参数的short方法,并以字符串形式返回本地IP地址的哈希值作为键,其值为true:
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
的响应时是否有办法,以便可以在任何机器上测试该方法,而不必担心由于与本地机器相关的差异而导致失败。
非常感谢任何帮助。
谢谢!
答案 0 :(得分: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"]