2015-06-23 66 views
-2

我正在使用JUnit來測試一些代碼。expect:java.lang.Long <1>但是:java.lang.Integer <1>

這下面的部分:

assertEquals(query.get(0).get("FEEDBACK_ID"), feedbackValues.getFeedbackId()); 

結果在以下錯誤:

java.lang.AssertionError: expected: java.lang.Long<1> but was: java.lang.Integer<1> 

這很好......

我的問題是,我怎麼能轉換這個對象:

query.get(0).get("FEEDBACK_ID") 

爲了避免測試失敗而進入Integer?我知道將右側的物品轉換成長時間會更容易,但我不想這樣做。

+2

如果一個是'Integer'而另一個是'Long',那麼最好將這兩個值都測試爲'long'而不是'int'。對'assertEquals'使用'Number#longValue'。 –

+0

'......但我不想這樣做。「最簡單的解決方案是,然後評論整個行。測試通過,完成工作。 (Ps:這當然不是嚴肅的建議,只是一個笑話而已,但我要說的是,如果你願意破解你的測試而不是解決問題,那麼你也可以是的,在這種情況下,你可以認爲它既不是在這裏,也不是在那裏,但這是一個滑坡。) – biziclop

+1

@AlexR非常糟糕的想法... –

回答

1

你想達到的東西是錯誤的,所以唯一有效的答案是:不要這樣做。基本上,您正試圖在您的方法中添加一個行爲來匹配您的測試。你在這種情況下測試什麼?當然不是方法。即使發生這種情況的可能性很小,拋棄到int可能會導致整數溢出並導致您的測試失敗。

測試不應該向測試方法的輸出添加額外的轉換,否則誰測試這些額外的轉換?爲什麼API不返回你想要操作的類型?

您的方法應該返回相同的類型,或者您應該將int結果提升爲long,因爲它是安全的。

+0

評論來自downvoter? – Dici

相關問題