簡體   English   中英

是否有一個版本的JUnit斷言使用Hamcrest的'describeMismatch'功能?

[英]Is there a version of JUnit assertThat which uses the Hamcrest 'describeMismatch' functionality?

在我試過的每個JUnit版本中(最多4.8.1),一個失敗的assertThat會顯示一條錯誤消息,如下所示:

預期的:[describeTo]
得到:[對象的字符串表示]

換句話說,它將顯示對象的toString()而不是匹配器中的不匹配描述。 如果我使用org.hamcrest.MatcherAssert.assertThat中的assertThat,那么它將調用'describeMismatch'並顯示更有用的錯誤消息。

我是否正確使用Junit,或者目前沒有JUnit版本能夠滿足我的需求嗎? 那么大多數人都會使用Hamcrest聲明嗎?

簡答:不。

據我所知,最新版本的Hamcrest(1.2)引入了類型簽名,它與版本1.1不兼容,JUnit目前依賴它。 我不確定Hamcrest的變化造成的損害程度(可以這么說),但JUnit團隊似乎並不急於升級(參見公開問題 )。

我不完全確定我已經解決了我的問題,但我打算使用MatcherAssert.assertThat() 這可能需要特定版本的JUnit(我認為是junit-dep-xxx),它不會與Hamcrest發生類路徑沖突。 否則,當assertThat()調用describeMismatch()時,您可能會收到NoSuchMethodErrors

是的,這是由JUnit 4.11中的 此提交修復的:

正如Hamcrest的Steve Freeman所指出的,Matcher接口現在還有一個方法describeMismatch。 為了安全地在將來捕獲這些改進,使用MatcherAssert而不是復制其實現。

隨着Hamcrest 1.3 (也在4.11)的升級 ,這兩個版本可以很好地協同工作。

使用其他版本 assertThat(String, T, Matcher<T>)並在第一個參數中編寫您自己的消息,以便更好地描述失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM