La prueba de caja blanca requiere que cada línea de código se cubra al menos una vez.
@Apimodelproperty ("Categoría de discípulo")@ManyToOne // Establecer el campo Categoría de asunto para que esté vacío @Joincolumn (nullable = false) @jsonview ({nojsonview.class, MedeurementCategoryjsonView.getallbydisciplineid.class}) disciplina privada disciplina;Tomando el ejemplo anterior de establecer el sujeto no vacío como caso, necesitamos probar dos situaciones: excepciones cuando están vacías y guardarlos normalmente cuando no están vacíos.
@Testpublic void saveTest () {logger.debug ("nueva unidad de categoría de medición"); MEDIAMETIONITCATATECTORY MEDIAMETIMETCATUGORY = new MedeMementUnitCategory (); logger.debug ("Test Save"); medirunitCategoryService.save (MedeurementUnitCategory);} Aquí llamamos el método save , pero IDE no nos pidió que captara la excepción, pero no significa que el método save no arroje una excepción. Puede lanzar una RuntimeException no verificada o su excepción derivada.
Para probar esta excepción, primero ejecutamos esta línea de código para ver qué excepción aparece.
org.springframework.dao.dataintegityViolationException: no pudo ejecutar la declaración; Sql [n/a]; restricción [nulo]; La excepción anidada es org.hibernate.Exception.ConstraNDViolationException: no pudo ejecutar la declaración
Causado por: org.hibernate.exception.ConstraintViolationException: no pudo ejecutar la declaración
Causado por: org.h2.jdbc.jdbcsqlexception: nulo no permitido para la columna "disciplina_id"; Declaración SQL:
Insertar en medidas_unit_category (id, disciplina_id, is_asc) valores (nulo,?,?) [23502-194]
Vemos tres excepciones, primero, JdbcSQLException Al insertar este registro, entonces la excepción causa ConstraintViolationException , y la nueva excepción causa DataIntegrityViolationException .
Esto Caused by es en realidad una encapsulación de excepción. Por ejemplo, la capa subyacente puede arrojar excepciones, pero generalmente manejamos excepciones a un nivel relativamente alto.
Tome esto como ejemplo. Los datos de DataIntegrityViolationException viola las excepciones, y pueden ocurrir muchos tipos de excepciones, por lo que los métodos de procesamiento de esta excepción son los mismos o similares.
Cuando la capa subyacente lanza una JdbcSQLException , luego llama a su método para catch la excepción, y desarrolla una nueva excepción ConstraintViolationException con la excepción (excepción de violación de restricción), luego lo lanza a la capa superior, y luego la atrapa a la capa superior, construye una nueva excepción DataIntegrityViolationException y lo arroja a nosotros. No lo manejamos, y luego la consola informa un error.
La ventaja de mantener encapsulando y lanzar hacia arriba es que puedo usar una excepción para manejar una situación similar, y luego, al tratar con esta excepción, puedo rastrear la fuente y mantenerlo preciso a lo que lo causó. Si este paquete no está disponible, necesitamos ir directamente a catch para ubicar con precisión el error.
Ok, la excepción que debemos ver aquí es la excepción de DataIntegrityViolationException que la aplicación nos presentó.
@TestPublic void saveTest () {logger.debug ("Preparación de datos de prueba básica"); MEDIAMETIONITCATATECTORY MEDIAMETIMETCATUGORY = new MedeMementUnitCategory (); Boolean CatchException = false; logger.debug ("Prueba Guardar, espere lanzar una excepción"); intente {medireMementUnitCategoryService.save (MedeurementUnitCategory); } catch (dataIntagrityViolationException e) {CatchException = true; } logger.debug ("afirmar que la excepción de captura es verdadera"); afirmar que (captException) .istrue ();}Ejecute la prueba y pase.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.