2011-11-30 6 views
11

ifステートメントでは、砂糖フレームワークとしてhamcrestを使用したいと思います。アサーションを使用した単体テストではなく、生の生産コードで使用します。ただブール値を返すだけでAssertThatのようなものの、エラーをスローせず生産コードでHamcrestマッチャーを使用する方法はありますか?

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

または

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

よう

何か、。 可能ですか?

答えて

4

は、次の構文を提供しbool projectあります:

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

なしマッチャーを使用する方法うわー、それは本当に印象的です! – Vitamon

+1

IMHO boolプロジェクトは単純なメソッド "the"の少し過剰です。追加のマッチャーを提供していますが、これらは(allOf、anyOf、どちらか、両方などのような)ハムクレストの重複です。 – Jonas

5

これはちょうどJavaであり、あなたが選択したことはあなた次第です。 Hamcrest homepageは言う:

が「一致」のルールは、宣言的に定義されるように他のフレームワークで使用できるようにすることマッチャーオブジェクトのライブラリ(も制約や述語として知られている)を提供します。典型的なシナリオには、フレームワークのテスト、ライブラリの模倣、UI検証ルールなどがあります。

注:Hamcrestそれはテストライブラリではありません:ちょうどマッチャーがをテストするために非常に有用であることが起こります。

また、ハムクレストを使用するa page on the other frameworksもあります。

+0

私はちょうど実施例を必要とする、同意、assertThat – Vitamon

5

matches(value)メソッドは、Matcherインスタンスを使用できます。

if (equalTo("John").matches(name)) { ... } 

可読性を向上させるには、assertThatに似た独自のヘルパーメソッドを作成します。あなたはcheckThatifTrueThatとしてより良い名前を思い付く場合

public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) { 
    return matcher.matches(actual); 
} 

... 

if (checkThat(name, equalTo("John"))) { ... } 

、コメントでそれを追加してください。 :)

5

私たちは現在、これを正確にやっており、ヘルパーメソッドの名前は "()"です。最後に少し舌足らず-Yを取得しますが、でも、クライアントのために、それは非常に読みやすくなり

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

:このようなコードにつながります。