Третий матч в google для «C ++ slicing» дает мне эту статью в Википедии http://en.wikipedia.org/wiki/Object_slicing и этот (нагретый, но первые несколько сообщений определяют проблему ): http://bytes.com/forum/thread163565.html
Таким образом, это когда вы назначаете объект подкласса суперклассу. Суперкласс ничего не знает о дополнительной информации в подклассе и не имеет места для его хранения, поэтому дополнительная информация получает «отрезанный».
Если эти ссылки не дают достаточной информации для «хороший ответ», пожалуйста, отредактируйте свой вопрос, чтобы сообщить нам, что еще вы ищете.
Java 8+ (до 12) не имеет такого подхода (возможно, в будущем появятся некоторые изменения).
Со стороны чистой Java вы можете использовать assert :
assert <condition> : <message>
В случае неудачи подтверждения выбрасывается AssertionError
с <message>
.
Однако, вы должны быть уверены, что это активируется добавлением атрибута -ea
в JVM .
Утверждения добавляют более значимую информацию для неудачных дел.
В качестве альтернативы вы можете использовать apache-commons-lang
Validate class:
Validate.notNull(i, "this parameter can't be null")
Validate.isTrue(i > 0, "The value must be greater than zero: %d", i);
Я думаю, вы можете использовать Apache Commons Lang для этого. У них есть много методов проверки в Validate class . Я не уверен, достаточно ли он выразителен, но если вам нужно что-то еще, то можно просто написать это для себя, кода для простых проверок не должно быть много.
Кроме того, если вы когда-нибудь захотите интегрировать эти проверки в свой основной код бизнес-логики (а не только в модульные тесты), вам следует взглянуть на Bean Validation . Таким образом, вы определенно не изобретаете колесо, и ваши тесты будут ожидать только исключения из среды валидации.
Ура.
Я использую валидацию пружин, но иногда я пишу валидации, расширяя валидацию пружин для управления некоторым пользовательским поведением