يتطلب اختبار الصندوق الأبيض تغطية كل سطر من الكود مرة واحدة على الأقل.
apImodElProperty ("فئة التلميذ")@manyToone // قم بتعيين حقل فئة الموضوع ليكون فارغًا@joincolumn (nullable = false) jsonview ({nonejsonview.class ، assurementUnitCategoryJsonView.getAllbyDisciplineId.class}) الانضباط الخاص ؛مع أخذ المثال السابق في تعيين الموضوع ليس فارغًا كحالة ، نحتاج إلى اختبار حالتين: استثناءات عندما تكون فارغة وحفظهما بشكل طبيعي عندما لا تكون فارغة.
testpublic void savetest () {logger.debug ("وحدة جديدة من فئة القياس") ؛ assurementUnitCategory assurementUnitCategory = new AgeurementUnitCategory () ؛ logger.debug ("اختبار حفظ") ؛ assurementUnitCategoryService.save (assurementunitcategory) ؛} هنا أطلقنا على طريقة save ، لكن IDE لم يدفعنا إلى التقاط الاستثناء ، لكن هذا لا يعني أن طريقة save لا ترمي استثناء. يمكن أن يرمي RuntimeException غير المحسوس أو استثناءها المشتق.
لاختبار هذا الاستثناء ، قمنا أولاً بتشغيل خط الرمز هذا لمعرفة ما يظهر الاستثناء.
org.springframework.dao.dataintegrityViolationException: لا يمكن تنفيذ البيان ؛ SQL [n/a] ؛ القيد [فارغ] ؛ الاستثناء المتداخل هو org.hibernate.exception.constraintViolationException: لا يمكن تنفيذ البيان
بسبب: org.hibernate.exception.constraintviolationexception: لا يمكن تنفيذ البيان
بسبب: org.h2.jdbc.jdbcsqlexception: لا يوجد مسموح به للعمود "الانضباط_د" ؛ بيان SQL:
أدخل في القيم المقياس reasurement_unit_category (المعرف ، الانضباط ، IS_ASC) (NULL ،؟ ،؟) [23502-194]
نرى ثلاثة استثناءات ، أولاً ، JdbcSQLException عند إدخال هذا السجل ، ثم يسبب الاستثناء ConstraintViolationException ، والاستثناء الجديد يسبب DataIntegrityViolationException .
هذا Caused by في الواقع تغليف استثناء. على سبيل المثال ، قد ترمي الطبقة الأساسية استثناءات ، لكننا نتعامل بشكل عام مع الاستثناءات على مستوى عالٍ نسبيًا.
خذ هذا كمثال. DataIntegrityViolationException Data تنتهك الاستثناءات ، وقد تحدث العديد من أنواع الاستثناءات ، وبالتالي فإن طرق معالجة هذا الاستثناء هي نفسها أو ما شابه.
عندما ترمي الطبقة الأساسية JdbcSQLException ، ثم تستدعي طريقتها catch بالاستثناء ، وإنشاء استثناء جديد ConstraintViolationException مع استثناء (استثناء انتهاك التقييد) ، ثم يلقيها إلى الطبقة العليا ، ثم يلتقطها إلى الطبقة العليا ، وتبني استثناء جديد DataIntegrityViolationException و thers to us. لم نتعامل معها ، ثم تقارير وحدة التحكم عن خطأ.
تتمثل ميزة الحفاظ على التغليف والرمي لأعلى هي أنه يمكنني استخدام استثناء للتعامل مع موقف مماثل ، وبعد ذلك عند التعامل مع هذا الاستثناء ، يمكنني تتبع المصدر والحفاظ على دقة ما سبب ذلك. إذا لم تكن هذه الحزمة متوفرة ، فنحن بحاجة إلى الانتقال مباشرة إلى catch الأساسية لتحديد موقع الخطأ بدقة.
حسنًا ، الاستثناء الذي نحتاجه إلى التقاطه هنا هو استثناء DataIntegrityViolationException الذي ألقاه التطبيق لنا.
testpublic void savetest () {logger.debug ("إعداد بيانات الاختبار الأساسي") ؛ assurementUnitCategory assurementUnitCategory = new AgeurementUnitCategory () ؛ catchexception منطقية = خطأ ؛ logger.debug ("اختبار حفظ ، توقع رمي الاستثناء") ؛ جرب {assurementUnitCateGoryService.save (assurementUnitCategory) ؛ } catch (dataintegrityViolationException e) {catchException = true ؛ } logger.debug ("تأكد من أن استثناء الالتقاط صحيح") ؛ AssertThat (catchException) .edistrue () ؛}قم بإجراء الاختبار والمرور.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.