このアサートはコードを乱雑にするだけで、次のアサートと同等です。
boolean a = true;
assert a : "A should be true"
それがあなたのプログラムのポイントでない限り、あなたはあなたのJVMをテストするべきではありません(例えば、それはあなたが作っているJVMのテストスイートです)。代わりに、事前条件、事後条件、および不変条件をテストする必要があります。これらのテストは基本的すぎたり、費用がかかりすぎたりする場合があります。
前提条件は、おそらくメソッドの開始時にのみ表示する必要があります (非常に長いメソッドがある場合は、それらがすべてプライベートであっても、そのメソッドを小さな部分に分割する必要があります)。
事後条件は、呼び出し元に何を返したかを明確にする必要があります。sqrt 関数が sqrt を返しただけかどうかはテストしませんが、期待していることを明確にするために肯定的かどうかをテストすることはできます (おそらく後のコードでは複素数であり、あなたのものはそのためにテストされていません)。代わりに、一番下にコメントを残してください。
不変条件もテストできないことがよくあります。現在の解が正しい部分解であることをテストすることはできません (以下を参照)。代わりに、コメントで不変条件を宣言します。
外部から物事を呼び出す場合は、アサートも使用します。たとえば、例で があった場合はArrayList.Create()
、 のアサーション チェックを選択できますnull
。ただし、他のコードを信頼していないためです。そのコードを記述した場合、アサーション (コメントまたはその他) をファクトリ メソッド自体に入れることができます。
int max(int[] a, int n) {
assert n <= a.length : "N should not exceed the bounds of the array"
assert n > 0 : "N should be at least one"
// invariant: m is the maximum of a[0..i]
int m = a[0];
for( int i = 1; i < n; n++ ) {
if( m < a[i] )
m = a[i];
}
// if these were not basic types, we might assert that we found
// something sensible here, such as m != null
return m;
}