Подтвердить что ты не робот

Почему Гуава не имеет постусловий? Что я могу использовать вместо этого?

Итак, у Guava есть простой, но полезный Preconditions, чтобы проверить аргументы метода. Но я думаю, было бы разумно иметь класс "Постусловия". Или это просто потому, что Java предоставляет утверждения?

Так как такого класса не существует, каков "лучший" (практический) альтернативный способ проверки postonditions до возвращения mathod?

4b9b3361

Ответ 1

Я бы использовал ключевое слово Java assert в самом методе для кодирования постусловия.

Unit Test или постусловие?

Единичные тесты и постусловия служат различным целям.

Утверждение в unit test обеспечивает проверку результата метода для одного входного вектора. Это оракул, определяющий ожидаемый результат для одного конкретного случая.

An assert в самом методе проверяет, что для любого ввода выполняется постусловие. Это оракул, определяющий (свойства) ожидаемый результат для всех возможных случаев. Такое postcondition-as-oracle хорошо сочетается с автоматизированными методами тестирования, в которых легко создавать входы, но трудно генерировать ожидаемое значение для каждого входа.

Постусловия Guava?

Что касается того, что у Guava есть класс Precondition, но нет класса Postcondition, здесь мое понимание.

Предварительные условия Guava эффективно предоставляют ряд сокращений для обычных ситуаций, в которых вы хотели бы бросить конкретный вид исключения (недопустимый аргумент, нулевой указатель, индекс за пределами границ, незаконное состояние) на основе входов метода или объекта состояние.

Для постусловий таких распространенных случаев меньше. Следовательно, меньше необходимости предоставлять стенографию, бросающую определенные виды исключений. Неудачное постусловие похоже на HTTP 500 "Внутренняя ошибка сервера" - все мы знаем, что что-то пошло не так, выполняя наш метод.

(Обратите внимание, что предположение Guava о предварительном условии сильно отличается от представления о конструировании по контракту, в котором нет никаких гарантий, если предварительное условие не является met - даже не исключено разумное исключение. Класс Guava Preconditions предоставляет полезные возможности, чтобы сделать публичный API более защищенным).

Ответ 2

Тестирование условий сообщения было бы излишним. То, как мы тестируем post-conditions в java, - это модульное тестирование.

При модульном тестировании мы гарантируем, что для данного ввода мы получим прогнозируемый результат. С помощью Preconditions мы можем проверить, что у нас есть действительный ввод, и, следовательно, результат уже гарантирован испытаниями.

Ответ 3

Предпосылки и постусловия служат в самых разных целях.

Предварительные условия проверяют ввод, который не находится под контролем метода; постусловия проверяют выход, который есть. Поэтому они не имеют никакого смысла внутри самого метода, но только как внешний код, который проверяет метод.

Однако, если вы действительно хотели поставить такие утверждения в свой код, условия Guava Precditions тоже будут очень хороши для этого, даже если это не их цель.