Это утверждают только загромождает ваш код, это было бы эквивалентно этому утверждают:
boolean a = true;
assert a : "A should be true"
Вы не должны быть тестирование вашей виртуальной машины Java, если это не точка вашей программы (например, это набор тестов для созданный вами 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;
}
Если между «новым» и «утвердительным» существует много кода, который может изменять «свойства». –
Несомненно. Но в этом примере нет кода между ним, и даже если бы это было так, я не думаю, что утверждение было бы правильным. – Jorn