我在Ruby的測試如下如何獲得一個Ruby單元測試失敗消息來打印對象內容而不是地址?
def testSomeObjectsAreEqual
assert_equal(object1, object2)
end
如果測試失敗,我得到它指出了兩個對象不相等,並給出消息的以下樣式的預期值和實際值的錯誤消息:
<#<Java:com.mynamespace.MyClass:0x1232b3e12>> expected but was
<#<Java:com.mynamespace.MyClass:0x489654ebd>>.
正如你所看到的,我正在使用JRuby來實例化一個Java類,並且這是被比較的對象。我已經嘗試在Ruby中打印object.to_s,並且打印出明智的外觀消息,它似乎直接映射到MyClass的Java聲明的toString()方法,但是to_s似乎並未用於斷言的失敗消息。無論如何,我可以讓Ruby測試/單元使用對象的to_s值,因爲這會使失敗消息對我更有用嗎?
嗯,這就是我希望會發生,但正如我在問題中提到, to_s在我的類中實現,甚至當我明確地在Ruby中擴展類以指定to_s,因此它調用Java類toString()方法時,它仍然打印對象地址,而不是對象內容(將由to_s給出) ... –
錯誤的測試框架,我的道歉。答覆修正。 –
我用#inspect修飾了我的類,以便它調用Java toString(),並且做到了這一點!我猜測對於JRuby中的Java類,默認的檢查實現不能訪問私有成員,因此我所得到的僅僅是對其的引用。這個問題與我所問的相似,但不完全相同[http://stackoverflow.com/questions/2625667/why-do-this-ruby-object-have-two-to-s-and-inspect-methods - 即-DO最相同的事情。接受你的回答,謝謝。 –