Le test de la boîte blanche nécessite que chaque ligne de code soit couverte au moins une fois.
@Apimodelproperty ("catégorie de disciple") @ ManyToOne // Définissez le champ de catégorie de sujet pour être vide @joincolumn (nullable = false) @jsonView ({nuejsonView.class, mesurementUnitCategoryJsonView.getAllByDisciplineId.class}) discipline privée;Prenant l'exemple précédent de la définition du sujet qui n'est pas vide en tant que cas, nous devons tester deux situations: exceptions lorsqu'ils sont vides et les enregistrer normalement lorsqu'ils ne sont pas vides.
@TestPublic void SaveTest () {logger.debug ("Nouvelle unité de catégorie de mesure"); MesurementUnitCategory Measurement UnitCategory = New MesurementUnitCategory (); Logger.debug ("Test Save"); MesurementUnitCategoryService.Save (MesurementUnitCategory);} Ici, nous avons appelé la méthode save , mais IDE ne nous a pas invité à prendre l'exception, mais cela ne signifie pas que la méthode save ne lance pas d'exception. Il peut lancer un RuntimeException non coché ou son exception dérivée.
Pour tester cette exception, nous exécutons d'abord cette ligne de code pour voir quelle exception apparaît.
org.springframework.dao.datainTegrityviolationException: Impossible d'exécuter une instruction; Sql [n / a]; contrainte [nul]; L'exception imbriquée est org.hibernate.exception.ConstraintviolationException: Impossible d'exécuter une déclaration
Causé par: org.hibernate.exception.ConstraintviolationException: Impossible d'exécuter une déclaration
Causé par: org.h2.jdbc.jdbcsqlexception: null non autorisé pour la colonne "discipline_id"; Instruction SQL:
Insérer dans mesurer_unit_category (id, discipline_id, IS_ASC) VALEURS (null,? ,?) [23502-194]
Nous voyons trois exceptions, d'abord, JdbcSQLException lors de l'insertion de cet enregistrement, alors l'exception provoque ConstraintViolationException , et la nouvelle exception provoque DataIntegrityViolationException .
Cela Caused by en fait une encapsulation d'exception. Par exemple, la couche sous-jacente peut lancer des exceptions, mais nous gérons généralement les exceptions à un niveau relativement élevé.
Prenez ceci comme exemple. DataIntegrityViolationException les données violent des exceptions, et de nombreux types d'exceptions peuvent se produire, donc les méthodes de traitement de cette exception sont identiques ou similaires.
Lorsque la couche sous-jacente lance une JdbcSQLException , appelle sa méthode pour catch l'exception, et construit une nouvelle exception ConstraintViolationException DataIntegrityViolationException l'exception (exception de violation de restriction), puis la jette à la couche supérieure, puis la capte à la couche supérieure. Nous ne l'avons pas géré, puis la console rapporte une erreur.
L'avantage de maintenir l'encapsulation et de jeter vers le haut est que je peux utiliser une exception pour gérer une situation similaire, puis lorsqu'il s'agit de cette exception, je peux tracer la source et rester exact à ce qui l'a causée. Si ce package n'est pas disponible, nous devons dire directement catch exceptions sous-jacentes sous-jacentes pour localiser avec précision l'erreur.
Ok, l'exception que nous devons attraper ici est l'exception DataIntegrityViolationException qui nous est proposée par l'application.
@TestPublic void SaveTest () {logger.debug ("Préparation de données de test de base"); MesurementUnitCategory Measurement UnitCategory = New MesurementUnitCategory (); Boolean CatchException = false; Logger.debug ("Test Save, attendez-vous à lancer une exception"); essayez {measurementUnitCategoryService.save (MesurementUnitCategory); } catch (dataintegrityviolationxception e) {catchException = true; } logger.debug ("affirmer que l'exception de capture est vraie"); AssertThat (CatchException) .istrue ();}Exécutez le test et passez.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.