Хороший класс 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");

Третий вариант - написать эти методы самостоятельно. Обычно есть только две строки кода. Таким образом, они будут делать все, что вы хотите.

Spring имеет один в модуле основной пружины, Assert


Вы можете использовать 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));

Ссылки:

Другие вопросы по тегам