6

assertJavaキーワードは、製品コードで常に有効になっているとは限らないため、好きではありません。記載されているアサーションを常に実行する、使用する優れた「ProductionAssert」クラスを探しています。

候補の 1 つはGuava の Preconditionsです。それはまともですが、少し制限されています(たとえば、いいえ、、、assertEquals())。assertNull()assertGreaterEquals()

代替手段の 1 つは、jUnit または別のテスト フレームワークを含めることですが、単純な assert クラスのためだけにテスト フレームワーク全体に依存することには消極的です。

Groovy でプログラミングする場合は、PowerAssertを使用します。

Java 用の適切な「ProductionAssert」クラスはありますか?

PS - 1 つのオプションは最終的にJava Contractsのようなものをチェックアウトすることです...しかし、私が今探しているのは、絶対に最小限で摩擦がなく、ビルドプロセスの種類のクラスを変更せずにドロップインするだけです。 .. 契約がその説明に適合するかどうかはわかりません。

4

4 に答える 4

5

私はSpringのAssertクラスを使用する傾向があります。

public void thing(String foo){
    Assert.hasText(foo, "'foo' is required");
}

明らかに、スプリングを使用していない場合、これはボートを浮かせることはなく、グアバよりもはるかに優れているかどうかはわかりません。

于 2012-02-07T12:36:26.800 に答える
3

Junitを使用します。これらのテストを使用するように設計されています。

別のオプションは、アサートが常にオンになっていることを確認することです。つまり、本番環境を制御できない場合です。そうでない場合、プログラムが失敗する可能性があります。

boolean assertOn = false;
assert assertOn = true;
if (!assertOn) 
   throw new AssertionError("Assertions must be turned on");

3 番目のオプションは、これらのメソッドを自分で作成することです。通常、コードは 2 行だけです。そうすれば、彼らはあなたが望むすべてのことをします。

于 2012-02-07T12:51:57.120 に答える
1

Springには、Spring-CoreモジュールにAssertが1つあります。


于 2012-02-07T12:33:45.767 に答える
0

hamcrest-matchers (Maven Central で org.valid4j:valid4j として見つかります) で valid4j を使用できます。デフォルトのプロバイダーは AssertionError をスローしますが、必要に応じて独自のカスタマイズされたグローバル ポリシーを登録できます。

前提条件 (アサーションなど) の場合:

import static org.valid4j.Assertive.*;

require(x, greaterThan(0)); // throws RequireViolation extends AssertionError

「ensure」を使用した事後条件の同様のサポート。

補足: 通常の入力検証にも同じライブラリを使用できます (つまり、回復可能な例外をスローします)。

import static org.valid4j.Validation.*;

validate(argument, isValid(), otherwiseThrowing(InvalidException.class));

リンク:

于 2016-01-19T19:18:11.520 に答える