Ruby,两个对象数组的assert_equal

标签 ruby unit-testing assert

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

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/

相关文章:

c++ - 当我的项目在 Visual Studio 和 Qt Creator 中构建时,Q_ASSERT 具有不同的行为

c - 打印传入值的断言宏

java - 我应该使用什么 JUnit 命令来检查,预期的不等于实际的。

ruby-on-rails - Rails 测试在明显存在的情况下无法找到路线?

javascript - 如何使用 "link_to"而不是 "checkbox"进行 POST?

ruby - 在方法上指示 bool 值的替代方法

c# - 在 ASP.NET Core 中模拟 IPrincipal

xcode - XCode 中的单元测试 : Test rig '[...]/usr/bin/otest' exited abnormally with code 134

unit-testing - 单元测试应该放在哪里?

ruby-on-rails - Rails 控制台命令将不起作用。终端也启动了