このアサートだけクラッタあなたのコードは、このアサートに相当します:それはあなたのプログラムのポイントでない限り
boolean a = true;
assert a : "A should be true"
あなたは(たとえば、それがためにテストスイートです、あなたのJVMをテストするべきではありませんあなたが作っているJVM)。代わりに、事前条件、事後条件、不変条件をテストする必要があります。時々、これらのテストはあまりにも基本的すぎるか、または高すぎます。
前提条件は、メソッドの開始時にのみ表示する必要があります(メソッドが非常に長い場合は、それらがすべて非公開であっても小さなメソッドに分割する必要があります)。
ポスト条件では、呼び出し元に戻ったものを明確にする必要がありますが、sqrt関数がsqrtを戻したことをテストしていませんが、期待していたことを明確にすることができますおそらく後のコードは複素数を使用し、あなたのためにはテストされていません)。代わりに、下にコメントを残してください。
不変量はしばしばテストできないため、現在の解が正しい部分解(以下を参照)であることをテストすることはできません。これは、テール再帰を使って物事を書くことについての素晴らしい点の1つです。代わりに、不変式をコメントで宣言します。
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;
}
'new'と 'assert'の間に多くのコードがあり、 'alProperties'が変更されていない限り、 –
確かに。この例ではコード間にコードはありません。たとえあったとしても、私はアサーションが行く方法ではないと思います。 – Jorn