我是Ruby的新手,我正在编写一个简单的回文测试器以及单元测试。我的测试有一种奇怪的行为。如果我更改测试,则另一个测试结果会发生变
require 'test/unit'
require './string_with_palindrome'
class TestPalindrome < Test::Unit::TestCase
def test_string_palindrome_positive
assert "otto".palindrome?
end
def test_string_palindrome_negative
assert ! "foo".palindrome?
end
def test_array_palindrome
assert [3,1,3].palindrome?
end
def test_array_palindrome_negative
assert [2,1,3].palindrome?
end
end
经过测试的代码。也许这不是很充足,但在这种情况下这应该不重要。
module Enumerable
def palindrome?
self == self.reverse_each {|v| v}
end
end
class String
def method_missing(method_id, *args)
if method_id.to_s == 'palindrome?'
palindrome?(self)
else
super
end
end
end
def palindrome?(string)
prepare(string) == prepare(string).reverse
end
def prepare(string)
string.downcase.gsub(/\W/,'')
end
测试会导致一个错误:
1)失败:test_string_palindrome_negative(TestPalindrome) [/Users/prog/Documents/ruby/basics2/TestPalindrome.rb:10]:是 不是真的。
表示上次测试失败。
现在,按照测试通过的顺序,如果我通过否定对回文调用的结果来改变最后一次测试,则两次测试失败:
1)失败:test_array_palindrome_negative(TestPalindrome) [/Users/prog/Documents/ruby/basics2/TestPalindrome.rb:18]:是 不是真的。
2)失败:test_string_palindrome_negative(TestPalindrome) [/Users/prog/Documents/ruby/basics2/TestPalindrome.rb:10]:是 不是真的。
它是如何运作的?