2011-11-30 48 views
11

我想使用hamcrest作爲糖框架在if語句中使用,而不是在使用斷言的單元測試中使用,但在原始生產代碼中使用。任何方式在生產代碼中使用Hamcrest匹配器?

喜歡的東西

if (isNotEmpty(name)) return //.... 

if (isEqual(name, "John")) return //... 

就像AssertThat,但沒有引發錯誤,只是返回布爾值。 這可能嗎?

回答

4

有提供以下語法bool project

if(the(name, is(equalTo("Alex")))) { 
... 
} 
+0

哇,這真是令人印象深刻! – Vitamon

+1

恕我直言,布爾項目是一個簡單的方法「the」有點矯枉過正。儘管它提供了更多的匹配器,但這些只是Hamcrest的重複(比如allOf,anyOf,無論是等等) – Jonas

5

這只是Java,它取決於你選擇如何處理它。所述Hamcrest homepage說:

提供匹配的對象允許將聲明性地定義「匹配」的規則,在其他框架中使用的庫(也稱爲約束或謂詞)。典型的場景包括測試框架,模擬庫和UI驗證規則。

注:Hamcrest它不是一個測試庫:它只是碰巧匹配器是用於測試非常有用的。

還有使用Hamcrest的a page on the other frameworks

+0

同意,我只需要工作的例子,如何使用的匹配不assertThat – Vitamon

5

您可以使用任何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"))) { ... } 

如果你拿出一個比如ifTrueThatcheckThat一個更好的名字,請在註釋中添加。 :)

5

跟隨大衛的答案,我們目前正在做這個,我們的幫手方法被命名爲「()」。這導致瞭如下代碼:

if(the(name, is(equalTo("John")))) {...} 

它獲取在最後有點口齒不清-Y,反而使得即使客戶很可讀。

相關問題