有没有办法更改RUBY_PLATFORM常量,以便我可以测试以下方法w/RSpec2?使用RSpec 2测试RUBY_PLATFORM
def determine_os
case RUBY_PLATFORM
when /darwin/ then :mac
when /linux/ then :linux
else raise InvalidOSError
end
end
有没有办法更改RUBY_PLATFORM常量,以便我可以测试以下方法w/RSpec2?使用RSpec 2测试RUBY_PLATFORM
def determine_os
case RUBY_PLATFORM
when /darwin/ then :mac
when /linux/ then :linux
else raise InvalidOSError
end
end
RUBY_PLATFORM
不应该用于确定操作系统。改为使用散列RbConfig
中的适当项目。
另外,如果你想让它更易于测试,你可以做
def determine_os(os_string)
case os_string
when /darwin/ then :mac
when /linux/ then :linux
else raise InvalidOSError
end
end
,你可以为你的测试做determine_os("darwin")
。
设置它。 (会产生警告,忽略它们)
RUBY_PLATFORM = "darwin"
determine_os #=> :mac
RUBY_PLATFORM = "mingw"
determine_os #=> raises InvalidOSError
哈哈。谢谢。这是我尝试的第一件事,但我的测试还存在另一个问题,我认为这与测试警告有关。 – 2011-03-27 02:12:01
This blog post有办法存根常数和抑制警告。
谢谢,@AndrewGrimm! 'RbConfig ['host_os']'似乎是访问这些信息的最佳方法。我还发现,你提出的对'#definition_os'的更改使测试变得更容易。我以类似的方式调整了其他一些方法。 – 2011-03-29 04:24:26