Это может помочь Вам:
http://www.marcworrell.com/article-2990-en.html
Это - php, так должно быть довольно простым для установки на dev сервере.
я попробовал этого однажды:
Это довольно просто. У Вас есть ссылка для загрузки кода внизу.
Как я понимаю, предложение, которое вы цитировали, бессмысленно,
Конечно, assert не для проверки параметров.
Но в каждой нетривиальной программе есть (или должно быть) несколько инвариантов, и это место, где утверждения могут пригодиться. Если вы можете выразить инвариант в утверждении, сделайте это, независимо от того, является ли метод общедоступным или нет.
Затем произойдет одно из следующего:
а) все в порядке.
б) Во время выполнения программа завершается неудачно с невыполненным утверждением. Если утверждение верно, то инвариант нарушается, и у вас есть возможность выяснить причину и исправить ошибку (или переосмыслить свой дизайн).
Это, вероятно, оригинальный источник из руководства по Java SE «Программирование с утверждениями».
Не используйте утверждения для проверки параметров открытого метода. Утверждение неуместно, потому что метод гарантирует, что он всегда будет принудительно проверять аргументы. Он должен проверить свои аргументы, включены ли утверждения. Кроме того, конструкция assert не выдает исключение указанного типа. Может выдать только ошибку AssertionError.
Это не запрещает утверждения в публичных методах. Он запрещает их только для проверки аргументов публичного метода.
Утверждения проверяют инварианты. Класс контролирует фактические аргументы, отправленные его закрытым методам, и может гарантировать инварианты. Класс не управляет фактическими аргументами, отправляемыми в открытые методы, и должен генерировать исключения, если предварительные условия нарушены, даже если утверждения отключены.
Более подробную информацию о том, когда использовать утверждения, можно найти здесь .
В целом это звучит нормально. Хотя есть некоторые случаи, когда это может быть полезно.
Учтите, что мы могли бы выполнить операцию database update
для элемента, который, как мы знаем, существует. Тогда может быть полезно посмотреть, была ли подпрограмма успешной, например:
public void update(Object o) {
int nUpdatedObjects = dao.update(o);
assert(nUpdatedObjects == 1)
}
В этом случае она служит для validate
слоя dao
с использованием принципа сбоя быстрого .
Идея в том, что вы не знаете, кто будет использовать ваш публичный метод. Таким образом, вы должны защитить себя от неправильного использования с помощью обычных проверок.
С другой стороны, частные методы должны использоваться исключительно разработчиками в вашей текущей команде, поэтому проверки не являются (это) обязательными (но все же рекомендуются ИМХО).
Таким образом, для проверки правильности аргументов в частных методах должно быть достаточно утверждений.