Я новичок в 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]:это неправда.
Почему это так работает?