Хороший класс assert для производственного использования? Java-эквивалент GroAsy PowerAssert?
Мне не нравится ява assert
ключевое слово, потому что оно не всегда включено в производственный код. Я ищу хороший класс "ProductionAssert" для использования, который всегда выполняет отмеченные утверждения.
Один кандидат - Предварительные условия Гуавы. Это прилично, но немного ограничено (например, нет assertEquals()
, assertNull()
, assertGreaterEquals()
).
Одна альтернатива включает в себя jUnit или другую тестовую среду... но я не хочу зависеть от всей среды тестирования только для простого класса assert.
Если бы я программировал в Groovy, я бы использовал PowerAssert.
Есть хороший класс "ProductionAssert" для Java?
PS - один из вариантов - наконец-то проверить что-то вроде Java Contracts... но то, что я сейчас ищу, это абсолютный минимум, нулевое трение, просто вставка без каких-либо изменений в классе процесса сборки... Я не уверен, что контракты соответствуют этому описанию.
4 ответа
Я склонен использовать класс Assert Spring:
public void thing(String foo){
Assert.hasText(foo, "'foo' is required");
}
Очевидно, что если вы не используете весну, то это не собирается плавать на вашей лодке, и я не уверен, что она намного лучше, чем гуава.
Я бы использовал Junit. Он предназначен для использования этих тестов.
Другой вариант - убедиться, что подтверждения всегда включены. т.е. если вы не можете контролировать свою производственную среду. Вы можете вызвать сбой программы, если это не так.
boolean assertOn = false;
assert assertOn = true;
if (!assertOn)
throw new AssertionError("Assertions must be turned on");
Третий вариант - написать эти методы самостоятельно. Обычно есть только две строки кода. Таким образом, они будут делать все, что вы хотите.
Вы можете использовать valid4j с hamcrest-matchers (находится в Maven Central как org.valid4j:valid4j). Поставщик по умолчанию выбрасывает AssertionError, но при необходимости вы можете зарегистрировать свою собственную глобальную политику.
Для предварительных условий (как на самом деле утверждения):
import static org.valid4j.Assertive.*;
require(x, greaterThan(0)); // throws RequireViolation extends AssertionError
Аналогичная поддержка постусловий, использующих "sure".
Напомним, что вы можете использовать ту же библиотеку и для регулярной проверки ввода (т. Е. Генерировать восстанавливаемые исключения):
import static org.valid4j.Validation.*;
validate(argument, isValid(), otherwiseThrowing(InvalidException.class));
Ссылки: