hamcrestif
を、assertを使用した単体テストではなく、生の本番コードでステートメントで使用するためのシュガーフレームワークとして使用したいと思います。
何かのようなもの
if ( isNotEmpty(name) ) return //....
また
if ( isEqual(name, "John")) return //...
AssertThat
エラーをスローせずに、ブール値を返すのと同じです。出来ますか?
それはただのJavaであり、それを使って何をするかはあなた次第です。ハムクレストのホームページには次のように書かれています。
マッチャーオブジェクト(制約または述語とも呼ばれます)のライブラリを提供し、「一致」ルールを宣言的に定義して、他のフレームワークで使用できるようにします。典型的なシナリオには、フレームワークのテスト、ライブラリのモック、UI検証ルールが含まれます。
注:Hamcrestはテストライブラリではありません。たまたまマッチャーがテストに非常に役立つことがあります。
Hamcrestを使用する他のフレームワークに関するページもあります。
任意のインスタンスのmatches(value)
メソッドを使用できます。Matcher
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"))) { ... }
checkThat
、などよりも良い名前を思いついた場合ifTrueThat
は、コメントに追加してください。:)
Davidの回答に続いて、現在まさにこれを行っており、ヘルパーメソッドの名前は「the()」です。これにより、次のようなコードが生成されます。
if(the(name, is(equalTo("John")))) {...}
これは最後に少し聞き取りやすくなりますが、クライアントにとっても非常に読みやすくなります。
次の構文を提供するboolプロジェクトがあります。
if(the(name, is(equalTo("Alex")))) {
...
}