6

JUnit テストの 1 つで、オブジェクトを初期化しています。

MyObject myObject = new MyObject(220, 120, 0.05, true);

コンストラクターのシグネチャは次のとおりです。

public MyObject(int minLength, int maxLength, 
                double onBitsRatio, boolean forceAtLeastOneBitOn) 

に続く:

assert(onBitsRatio >= 0.0 && onBitsRatio <= 1.0);
assert(maxLength>=minLength);
assert(false);

奇妙なことに、私が期待するように、アサーションは実行を停止しません。

JUnit がこれらのアサーションを無視するのはなぜですか?

4

4 に答える 4

22

あなたが言うように、Javaのassertキーワードを使用しているため、JUnitはこれらのアサーションを無視していません。これは、JUnit ではなく JVM によって処理されます。

答えは、ほぼ確実に、JVM アサーションがオフになっていることです。でオンにしない限り、実際にはオフになっています-ea。それ以外の場合、これらは無視されます。

于 2012-12-12T12:31:01.363 に答える
6

JUnit から適切なアサートを使用していますか?

通常の Java アサートを使用している場合、これらはデフォルトでオフになっています。それらを明示的に有効にする必要があります。

これを使用してみてください:org.junit.Assert.assertTrue(false) 私の知る限り、JUnit Assert ライブラリには、単に呼び出されるメソッドはありません。assert()

アサートがオブジェクトに含まれているため、テストを失敗させたい場合は、アサートを有効にする必要があります。アサーションを有効にする方法を説明しているこのチュートリアルを見てください。

于 2012-12-12T12:26:44.063 に答える
2

それらを JUnit アサーションに変更します。jvm ではデフォルトで無効になっているプレーンなJava アサーションを使用しています。

assertTrue(onBitsRatio >= 0.0 && onBitsRatio <= 1.0);
assertTrue(maxLength>=minLength);
assertTrue(false);

本当にJavaアサーションを使用したい場合は-enableassertions、実行構成にパラメーターとして含まれていることを確認してください。

あなたの質問タグによると、あなたはEclipseを使用しているので、実行に移動します - >構成を実行し、VM引数タブに-enableassertionsまたは追加します。-ea

于 2012-12-12T12:29:06.747 に答える
1

From Java The Complete Reference :

" 実行時にアサーション チェックを有効にするには、-ea オプションを指定する必要があります。たとえば、AssertDemo のアサーションを有効にするには、次の行を使用して実行します。

java -ea AssertDemo "

于 2016-10-09T06:23:55.930 に答える