Ruby 两个明显相等的测试用例返回失败。是什么原因造成的?

Ruby 两个明显相等的测试用例返回失败。是什么原因造成的?,ruby,unit-testing,Ruby,Unit Testing,下面是我的测试用例中的几行代码。第一个断言是错误的,但为什么呢?第二种情况并非如此 result=Parser.parse_subject(@@lexicon.scan("kill princess"), Pair.new(:noun, "bear")) assert_equal(Parser.parse_subject(@@lexicon.scan("kill princess"), Pair.new(:noun, "bear")),Parser.parse_subject(@@lex

下面是我的测试用例中的几行代码。第一个断言是错误的,但为什么呢?第二种情况并非如此

  result=Parser.parse_subject(@@lexicon.scan("kill princess"), Pair.new(:noun, "bear"))
  assert_equal(Parser.parse_subject(@@lexicon.scan("kill princess"), Pair.new(:noun, "bear")),Parser.parse_subject(@@lexicon.scan("kill princess"), Pair.new(:noun, "bear")))
  assert_equal(result,result)
以下是实际错误:

Run options:

# Running tests:

.F.

Finished tests in 0.004000s, 750.0000 tests/s, 1750.0000 assertions/s.

  1) Failure:
test_parse_subject(ParserTests) [test_fournineqa.rb:30]:
Sentence:0x21ad958 @object="princess", @subject="bear", @verb="kill" expect
ed but was
Sentence:0x21acda0 @object="princess", @subject="bear", @verb="kill".

3 tests, 7 assertions, 1 failures, 0 errors, 0 skips

第一个断言比较两个具有相同内容的不同对象,而第二个断言比较两个相同的对象。显然,
equal
在这个上下文中表示“相同的对象”。(检查实现。)

看起来您已经定义了一个
类语句
,但是没有提供比较两个
语句
实例的方法,让
断言_equal
比较两个对象的标识,发现它们不是同一个实例

一个简单的修复方法如下:

class Sentence
  def ==(sentence)
    @subject == sentence.subject and
      @verb == sentence.verb and
      @object == sentence.object
  end
end