我有以下情况。我正在尝试为一组对象编写单元测试。该对象的定义如下:
class Element
attr_reader :title, :season, :episode
def initialize ( name, number )
@name = name
@number = number
end
def to_s
number = "%02d" % @number
result = "Number " << number << " " << @name
result
end
end
在测试期间我断言两个数组都包含三个元素,元素是相同的,甚至顺序相同仍然我得到一个错误,断言不相等。我想我在这里遗漏了一些非常基本的东西,是什么东西?
如果我用to_s方法比较每个元素,那么断言是正确的..这是应该在第一时间完成的吗?
答案 0 :(得分:3)
尝试使用以下代码为您的类声明方法==
。
def ==(other)
self.to_s == other.to_s
end
Sidenote,您可能也希望重构您的to_s方法,以获得一些简洁的代码。
def to_s
"Number %02d #{@name}" % @number
end
编辑:
数字已经定义了==
方法(https://github.com/evanphx/rubinius/blob/master/kernel/bootstrap/fixnum.rb#L117)。
Ruby通过在Array的每个元素上运行==
比较来比较数组。这是在数组上==
的实现,就像在Rubinius中完成的那样(Ruby实现几乎完全用Ruby编写)https://github.com/evanphx/rubinius/blob/master/kernel/common/array.rb#L474。
如果省略各种错误检测,它基本上会对数组的所有元素以递归方式运行==
,如果所有元素都匹配则返回true。