gpt4 book ai didi

Ruby,两个对象数组的assert_equal

转载 作者:数据小太阳 更新时间:2023-10-29 08:01:52 25 4
gpt4 key购买 nike

我有以下情况。我正在尝试为一组对象编写单元测试。该对象定义如下:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com