次のJavaコードは何をすべきですか?
public class foo{
public static void main(String[] args){
boolean mybool=false;
assert (mybool==true);
}
}
これはアサーションエラーをスローする必要がありますか?そうでない場合は、なぜですか?(エラーは発生しません!)
次のJavaコードは何をすべきですか?
public class foo{
public static void main(String[] args){
boolean mybool=false;
assert (mybool==true);
}
}
これはアサーションエラーをスローする必要がありますか?そうでない場合は、なぜですか?(エラーは発生しません!)
プログラムを実行するときは、コマンドラインに「-ea」を追加して、JavaVMでアサーションを有効にする必要があります。
java -ea -jar myprogram.jar
Java言語のアサーションは奇妙です。コマンドラインを起動するときにそれらを有効にする必要がありますが、私はそれが好きではありません。
このため、アサーションを行うためにサードパーティのライブラリを使用する傾向があります。Apache Commons Lang(Validatorクラス経由)、Spring(Assertクラス経由)、またはJUnit4(Assertクラス経由)もすべてこの機能を提供し、VM設定に関係なく機能します。Java5静的インポートを使用する場合、Javaアサートと同じように簡単に使用でき、さらに柔軟性があり、例外でエラーメッセージを指定できます。
これはスローする必要がありますAssertionErors
。
Eclipseを使用している場合は、アサーションをオンにする必要があります。デフォルトでは無効になっています。
これを行うには、JVM引数に-eaを追加します。
これにより、アサーションが有効になっている場合の情報にプログラムでアクセスできるようになります。
アサーションが無効になっている場合(これがデフォルトです)、アサーションステートメントは実行されず、myboolの値はfalseになります。
アサーションが有効になっている場合(jvm引数-ea)、アサーションが実行され、副作用によってmyboolがtrueに設定されます。
これを使用して、アサーションの有効化または無効化を強制できます。たとえば、テストの実行時にアサーションが常にオンになるように強制するために、アサーションが有効になっていない場合に失敗するテストがTestSuitesにあります。