Тест белого ящика требует, чтобы каждая строка кода была покрыта хотя бы один раз.
@Apimodelproperty ("Category Category")@ManyTOOne // Установить поле категории субъекта в пустую @joincolumn (nullable = false) @jsonview ({nonjsonview.class, измерение дисциплины;Принимая предыдущий пример установки субъекта, не пустой в качестве случая, нам нужно проверить две ситуации: исключения, когда они пусты, и сохранять их обычно, когда они не пусты.
@Testpublic void savetest () {logger.debug ("Новая единица категории измерения"); MeasurementUnitCategory SeasurementUnitCategory = New MeasurementUnitCategory (); logger.debug ("test save"); MeasurementUnitCategoryService.save (SeamurementUnitCategory);} Здесь мы позвонили методу save , но IDE не побудил нас поймать исключение, но это не означает, что метод save не бросает исключение. Он может бросить неверное RuntimeException или его производное исключение.
Чтобы проверить это исключение, мы сначала запустили эту строку кода, чтобы увидеть, какое исключение появляется.
org.springframework.dao.datainteGrityViolationException: не может выполнить оператор; SQL [N/A]; ограничение [null]; Вложенное исключение - org.hibernate.exception.constraintviolationException: не может выполнить оператор
Вызвано: org.hibernate.exception.constraintviolationException: не удалось выполнить оператор
Вызвано: org.h2.jdbc.jdbcsqlexception: null не разрешен для столбца "Disciply_id"; Заявление SQL:
Вставьте в измерение_unit_category (id, discipine_id, is_asc) значения (null,?,?) [23502-194]
Мы видим три исключения, сначала JdbcSQLException При вставке этой записи, то исключение вызывает ConstraintViolationException , а новое исключение вызывает DataIntegrityViolationException .
Это Caused by фактически инкапсуляцией исключения. Например, базовый слой может бросить исключения, но мы обычно обрабатываем исключения на относительно высоком уровне.
Возьмите это в качестве примера. DataIntegrityViolationException Данные нарушают исключения, и могут возникнуть многие типы исключений, поэтому методы обработки этого исключения одинаковы или похожи.
Когда базовый слой бросает JdbcSQLException , затем называет свой метод, чтобы catch исключение, и создает новое исключение ConstraintViolationException за исключением (исключение по ограничению), затем бросает его в верхний слой, а затем ловит его в верхний слой, создает новое исключение DataIntegrityViolationException и поднимает его к нам. Мы не справились с этим, а затем консоль сообщает об ошибке.
Преимущество сохранения инкапсулирования и подрыва вверх заключается в том, что я могу использовать исключение, чтобы справиться с аналогичной ситуацией, а затем при работе с этим исключением я могу проследить источник и сохранять точность до того, что его вызвало. Если этот пакет недоступен, нам нужно напрямую перейти к catch лежащим в основе исключений, чтобы точно найти ошибку.
ОК, исключением, которое нам нужно поймать, является исключение DataIntegrityViolationException , которое приложение, которое приложение.
@Testpublic void savetest () {logger.debug ("Базовая подготовка данных тестовых данных"); MeasurementUnitCategory SeasurementUnitCategory = New MeasurementUnitCategory (); Логический уловкий разум = false; logger.debug ("Save Save, ожидайте бросить исключение"); try {measurementUnitcategoryservice.save (SeamurementUnitCategory); } catch (DataInteGrityViolationException e) {catchException = true; } logger.debug ("утверждают, что исключение захвата верно"); AssertThat (CatchException) .istRue ();}Запустите тест и пройдите.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.