アドレスではなくオブジェクトの内容を印刷するRubyユニットテストの失敗メッセージを取得するにはどうすればよいですか?
def testSomeObjectsAreEqual
assert_equal(object1, object2)
end
を次のように、このテストは、私は2つのオブジェクトが等しいものではなく、期待値と実際の値のために、メッセージの次のスタイルを与えることを示すエラーメッセージが取得失敗したとき、私はRubyでのテストを持っている:
を<#<Java:com.mynamespace.MyClass:0x1232b3e12>> expected but was
<#<Java:com.mynamespace.MyClass:0x489654ebd>>.
ご覧のとおり、私はJRubyを使ってJavaクラスをインスタンス化しています。これが比較対象です。私はRubyでobject.to_sを印刷しようとしていて、賢明な見た目のメッセージを出力しますが、toString()メソッドが直接MyClassのtoString()メソッドにマップされているようですが、to_sはアサーションの失敗メッセージには使用されません。とにかくRubyテスト/ユニットにオブジェクトのto_s値を使用させることができるのですが、これは失敗メッセージを私にとってはるかに便利にするでしょうか?
まあ、それは私が起こることを望んだものだが、私は私の質問で述べたようにto_sは私のクラスで実装されていますが、to_sを指定するRubyのクラスを明示的に拡張してJavaクラスtoString()メソッドを呼び出すときでも、オブジェクトの内容ではなくオブジェクトのアドレス(to_sによって与えられる) ... –
誤ったテストフレームワーク、私の謝罪。回答が修正されました。 –
#inspectで私のクラスをmonkeypatchedして、JavaのtoString()を呼び出すようにしました。 JRubyのJavaクラスでは、デフォルトのインスペクション実装でプライベートメンバーにアクセスすることはできないと考えられます。この質問は私が求めているものと似ていますが、正確には同じではありません[http://stackoverflow.com/questions/2625667/why-do-this-ruby-object-have-two-to-s-and-inspect-methods - 同じことをする - ]。あなたの答えを受け入れる、ありがとう。 –