Есть ли у вас какие-либо советы для эффективного использования Java Assert? - PullRequest
4 голосов
/ 24 апреля 2010

Я не вижу большой части разработчиков, использующих Java Assert, но я очень заинтересован в их использовании. Не могли бы вы поделиться некоторыми советами по их эффективному использованию?

Ответы [ 4 ]

6 голосов
/ 26 апреля 2010

Я использую assert для проверки предварительных условий из непубличных методов, вот и все (я не претендую на выполнение разработки по контракту). На всякий случай, позвольте мне напомнить, что Программирование с утверждениями пишет о Предусловиях, Постусловиях и Инвариантах Класса :

Хотя конструкция assert не является полноценной конструкцией по контракту , она может помочь в поддержке неформального стиля программирования по контракту.

Для полноценной поддержки в Java, возможно, стоит рассмотреть возможность использования сторонней библиотеки (из Wikipedia ):

iContract2, Contract4J, jContractor, Jcontract, C4J, CodePro Analytix, STclass, препроцессор Jass, OVal с AspectJ, язык моделирования Java (JML), SpringContracts для среды Spring или Modern Jass, Custos с использованием AspectJ, JavaDbC с использованием AspectJ, JavaTESK с использованием расширения Java.

4 голосов
/ 26 апреля 2010

Поскольку ваш вопрос помечен как "java" и "design-by-contract" и не содержит JML, я подумал, что выложу ссылку:

http://www.eecs.ucf.edu/~leavens/JML/

JML - это язык аннотаций для написания контрактов в Java. Контракты могут быть проверены утверждениями во время выполнения или проверены статически. Немного покопавшись в том, что было сделано в сообществе JML, вы можете найти множество хороших принципов и идей для разработки по контракту в Java и других языках. JML вдохновил аналогичные языки аннотаций для других языков, таких как Spec # (для .NET) и ACSL (для C).

2 голосов
/ 24 апреля 2010

assert s используются для вставки проверок в ваш код, которые очень громко проваливаются во время разработки и игнорируются во время производства (определяется флагом).

Это было унаследовано от мира C, но не завоевало популярность из-за более систематического подхода, данного, например, jВ месте, где у вас есть независимые тестовые наборы, которые можно запускать по желанию.

Я бы порекомендовал вам изучить Test Driven Development, используя, например, Джунит, прежде чем исследовать слишком много времени в assert с. Скорее всего, как и я, вы обнаружите, что утверждения менее полезны, чем модульные тесты.

1 голос
/ 24 апреля 2010

Я лично использую утверждения для всех невосстанавливаемых болезненных сценариев - для этого они и предназначены. Это означает, что я утверждаю только самые важные части логики приложения. Утверждения, конечно, включены только при разработке и тестировании. Мы не хотим обременять производственный код ими, и предполагается, что мы все должным образом протестировали, чтобы пользователь никогда не попадал в такой критический сценарий.

...