Ruby单元测试不是彼此独立的?

时间:2012-03-10 16:57:59

标签: ruby unit-testing

我是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]:是   不是真的。

它是如何运作的?

0 个答案:

没有答案