Гуава предварительные условия checkNull, checkArgument
Я хочу проверить предварительные условия для базового класса, чтобы я знал, что подтипы всегда будут использовать допустимые аргументы конструктора.
Давайте возьмем в качестве примера конструктор, который:
takes 2 or more parameters takes parameters of different types for one parameter, it performs multiple checks (e.g. String is not null and not empty)Как лучше всего использовать подход предусловий Гуавы в этом случае?
В фальшивом примере, подобном этому: (это придумано!)
protected AbstractException(String errorMessage, Throwable errorCause) {
super(errorMessage, errorCause);
checkNotNull(errorMessage,
ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK, "errorMessage");
checkArgument(!errorMessage.isEmpty(),
ErrorMessage.MethodArgument.CANNOT_BE_EMPTY_STRING_CHECK,
"errorMessage");
checkNotNull(errorCause, ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK,
"errorCause");
}
Я заканчиваю тем, что звонюsuper
перед проверкой аргументов, потому что вызовsuper
должна быть первая строка метода и, хотя я мог бы сделатьsuper(checkNoNull(errorMessage))
Я не могу сделать то же самое, используяcheckArgument
потому что это возвращаетvoid
, Таким образом, дилемма:
checkStringNotNullAndNotEmpty()
Should I rather think about integration with matchers frameworks? (hamcrest, fest assertions...)
Я использую странно выглядящий ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK, потому что по умолчаниюthrow
не включает в себя сообщение об ошибке, поэтому со стороны тестирования я не могу распознать это как ошибку проверки аргумента, а не как "любой" NPE?
Я все делаю неправильно?