[#45318] Windows コマンドプロンプトで UTF-8を出力するには — Yuumi Yoshida <yuumi3@...>

おつかれさまです、 Yuumi3です。

11 messages 2008/08/08

[ruby-list:45438] assert_equalの挙動について

From: Akira Hayakawa <ruby@...>
Date: 2008-08-30 07:48:36 UTC
List: ruby-list #45438
こんばんわ。Akiraです。

Test::Unitをどう書くかちょっとやってみたら、よく分からない事が起きました。
Rubyではequal?がオブジェクトidの同一性を調べるもので、==がオブジェクトの値の一致を調べるものだとたのしいRubyのp.66に書いてあります。
また、assert_equalは==ならパスする関数で、assert_sameはequal?ならパスする関数だと以下のリファレンスに書いてあります。
http://www.ruby-lang.org/ja/man/html/Test_Unit.html

私は、以下のようなコードを書いてテストしました。

-------name.rb--------

class Name
  attr_accessor :name
  
  def initialize(name)
    @name = name
  end
end




-----name_test.rb-------

require "test/unit"
require "name"

class NameTest < Test::Unit::TestCase
  
  def setup
    super
    @a = Name.new("akira")
  end
  
  def test_name()
    assert_equal("akira", @a.name, message = nil)
    assert_equal(Name.new("akira"), @a, message = nil)
  end  

end

という何の為にテストしてるのかも分からないようなクラスですが、
2つ目のassert_equalでエラーが出ました。エラーメッセージは、

akira@akira-desktop:~/workspace/test$ ruby name_test.rb
Loaded suite name_test
Started
F
Finished in 0.01874 seconds.

  1) Failure:
test_name(NameTest) [name_test.rb:13]:
<#<Name:0xb7d32f54 @name="akira">> expected but was
<#<Name:0xb7d330a8 @name="akira">>.

1 tests, 2 assertions, 1 failures, 0 errors

@nameは同じなのに、値が違うと言われます。
実はこれはJavaでもなんでこうなるか分からなくて放置していたところで、
放置しておいても良い事ないので、どなたか教えていただけませんか?
idの一致はわかりやすいのですが、Rubyにおける==というのは何を持って真であるとみなすオペレータなのでしょうか?

-- 
Akira Hayakawa <ruby@i-mail.jp>

In This Thread

Prev Next