12

hamcrestifを、assertを使用した単体テストではなく、生の本番コードでステートメントで使用するためのシュガーフレームワークとして使用したいと思います。

何かのようなもの

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

また

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

AssertThatエラーをスローせずに、ブール値を返すのと同じです。出来ますか?

4

4 に答える 4

6

それはただのJavaであり、それを使って何をするかはあなた次第です。ハムクレストのホームページには次のように書かれています。

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

注:Hamcrestはテストライブラリではありません。たまたまマッチャーがテストに非常に役立つことがあります

Hamcrestを使用する他のフレームワークに関するページもあります。

于 2011-11-30T21:40:44.933 に答える
5

任意のインスタンスの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は、コメントに追加してください。:)

于 2011-12-01T22:07:32.217 に答える
5

Davidの回答に続いて、現在まさにこれを行っており、ヘルパーメソッドの名前は「the()」です。これにより、次のようなコードが生成されます。

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

これは最後に少し聞き取りやすくなりますが、クライアントにとっても非常に読みやすくなります。

于 2012-01-05T01:41:09.610 に答える
5

次の構文を提供するboolプロジェクトがあります。

if(the(name, is(equalTo("Alex")))) {
...
}
于 2012-12-15T15:21:36.960 に答える