Хороший класс assert для производственного использования?Java эквивалент GroAsy PowerAssert? - PullRequest
6 голосов
/ 07 февраля 2012

Мне не нравится ключевое слово java assert, потому что оно не всегда включено в производственном коде. Я ищу хороший класс "ProductionAssert" для использования, который всегда выполняет отмеченные утверждения.

Один из кандидатов Предварительные условия Гуавы . Это прилично, но немного ограничено (например, нет assertEquals(), assertNull(), assertGreaterEquals()).

Одной из альтернатив является включение jUnit или другого тестового фреймворка ... но я не хочу зависеть от целого фреймворка только для простого класса утверждения.

Если бы я программировал в Groovy, я бы использовал PowerAssert .

Есть ли хороший класс "ProductionAssert" для Java?

P.S. - один из вариантов - наконец-то проверить что-то вроде Java Contracts ... но то, что я сейчас ищу, это абсолютный минимум, нулевое трение, просто вставка без каких-либо изменений в сборке тип процесса ... Я не уверен, что контракты соответствуют этому описанию.

Ответы [ 4 ]

3 голосов
/ 07 февраля 2012

Я, как правило, использую класс Spring * Assert :

public void thing(String foo){
    Assert.hasText(foo, "'foo' is required");
}

Очевидно, что если вы не используете пружину, это не приведет к плаванию вашей лодки, и я не уверен, что этонамного лучше, чем гуава.

3 голосов
/ 07 февраля 2012

Я бы использовал Junit. Он предназначен для использования этих тестов.

Другой вариант - убедиться, что подтверждения всегда включены. Т.е. если вы не можете контролировать свою производственную среду. Вы можете вызвать сбой программы, если это не так.

boolean assertOn = false;
assert assertOn = true;
if (!assertOn) 
   throw new AssertionError("Assertions must be turned on");

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

1 голос
/ 07 февраля 2012

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


0 голосов
/ 19 января 2016

Вы можете использовать valid4j с hamcrest-matchers (находится в Maven Central как org.valid4j: valid4j).Поставщик по умолчанию выдает AssertionError, но при необходимости вы можете зарегистрировать свою собственную настраиваемую глобальную политику.

Для предварительных условий (например, действительно утверждений):

import static org.valid4j.Assertive.*;

require(x, greaterThan(0)); // throws RequireViolation extends AssertionError

Аналогичная поддержка для постусловий с использованием 'обеспечить'.

Примечание: вы можете использовать ту же библиотеку для обычной проверки ввода (т. Е. Генерировать восстанавливаемые исключения):

import static org.valid4j.Validation.*;

validate(argument, isValid(), otherwiseThrowing(InvalidException.class));

Ссылки:

...