我想使用hamcrest作爲糖框架在if
語句中使用,而不是在使用斷言的單元測試中使用,但在原始生產代碼中使用。任何方式在生產代碼中使用Hamcrest匹配器?
喜歡的東西
if (isNotEmpty(name)) return //....
或
if (isEqual(name, "John")) return //...
就像AssertThat
,但沒有引發錯誤,只是返回布爾值。 這可能嗎?
我想使用hamcrest作爲糖框架在if
語句中使用,而不是在使用斷言的單元測試中使用,但在原始生產代碼中使用。任何方式在生產代碼中使用Hamcrest匹配器?
喜歡的東西
if (isNotEmpty(name)) return //....
或
if (isEqual(name, "John")) return //...
就像AssertThat
,但沒有引發錯誤,只是返回布爾值。 這可能嗎?
有提供以下語法bool project:
if(the(name, is(equalTo("Alex")))) {
...
}
這只是Java,它取決於你選擇如何處理它。所述Hamcrest homepage說:
提供匹配的對象允許將聲明性地定義「匹配」的規則,在其他框架中使用的庫(也稱爲約束或謂詞)。典型的場景包括測試框架,模擬庫和UI驗證規則。
注:Hamcrest它不是一個測試庫:它只是碰巧匹配器是用於測試非常有用的。
還有使用Hamcrest的a page on the other frameworks。
同意,我只需要工作的例子,如何使用的匹配不assertThat – Vitamon
您可以使用任何Matcher
實例的matches(value)
方法。
if (equalTo("John").matches(name)) { ... }
爲了提高可讀性,請創建您自己的幫助方法,類似於assertThat
。
public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) {
return matcher.matches(actual);
}
...
if (checkThat(name, equalTo("John"))) { ... }
如果你拿出一個比如ifTrueThat
checkThat
一個更好的名字,請在註釋中添加。 :)
跟隨大衛的答案,我們目前正在做這個,我們的幫手方法被命名爲「()」。這導致瞭如下代碼:
if(the(name, is(equalTo("John")))) {...}
它獲取在最後有點口齒不清-Y,反而使得即使客戶很可讀。
哇,這真是令人印象深刻! – Vitamon
恕我直言,布爾項目是一個簡單的方法「the」有點矯枉過正。儘管它提供了更多的匹配器,但這些只是Hamcrest的重複(比如allOf,anyOf,無論是等等) – Jonas