我有以下情况。我正在尝试为一组对象编写单元测试。该对象定义如下:
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 方法比较每个元素,断言是正确的。首先应该这样做吗?
最佳答案
尝试使用以下代码为您的类声明一个方法 ==
。
def ==(other)
self.to_s == other.to_s
end
旁注,您可能还想重构您的 to_s 方法,以获得一些简洁的代码。
def to_s
"Number %02d #{@name}" % @number
end
编辑:
Numbers 已经定义了 ==
方法 (https://github.com/evanphx/rubinius/blob/master/kernel/bootstrap/fixnum.rb#L117)。
Ruby 通过对数组的每个元素运行 ==
比较来比较数组。这是数组上 ==
的实现,就像在 Rubinius 中所做的那样(一个几乎完全用 Ruby 本身编写的 Ruby 实现)https://github.com/evanphx/rubinius/blob/master/kernel/common/array.rb#L474 .
如果您忽略各种错误检测,它基本上会对数组的所有元素递归地运行 ==
,如果所有元素都匹配则返回 true。
关于Ruby,两个对象数组的assert_equal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5265621/