كيف تكتب بشكل صحيح

الآن دعنا نتحدث عن التأكيدات.

التأكيدات هي واحدة من الأشياء التي تعتبر أمرا مفروغا منه ، لذلك كل شيء هنا يبدو أن المتخصصين. يستخدم شخص ما Java المدمج أو Junit ، ويستخدم شخص ما مكتبات متقدمة ، ويقوم شخص ما ببناء مكتبته الخاصة.

ولكن دعونا نحاول التعامل مع هذا بجدية أكبر. كيف ، في الواقع ، أليس كذلك؟

أولاً ، التأكيدات تكرر المواصفات. إذا تم تحديد المواصفات التي يجب أن يتم إرجاعها ، يجب التحقق من ذلك ، وليس التأكيد.

ثانيا ، التأكيدات يجب أن تكون سهلة القراءة. هذا هو ، على الفور ، مقارنة مع المواصفات.

إذا كان هناك الكثير من التأكيدات (لذوقي الشديد ، فهناك الكثير من أكثر من واحد ، لكننا وضعنا حدًا لا يقل عن خمسة إلى سبعة) ، ثم يتوقف الاختبار ليكون مفهومًا. للأفضل ، يجب أن يكون لكل اختبار سبب واحد فقط للسقوط.

يمكن توجيه الأصول إلى: حقل بدائي أو كائن أو مجموعة أو نادراً ما تكون وظيفة أو thunk.

كلما كان الكائن أكثر تعقيدًا ، ستكون التأكيدات الأكثر تعقيدًا وتنوعًا ، وسيكون من الصعب قراءة الأخطاء والعثور عليها.

قراءة البيانات الإيجابية أفضل من البيانات السلبية المزدوجة.

تتم قراءة الطرق القياسية أفضل من المساعدين المخصصين. (من يعرف من وأين اختبر مكتبة المساعدين). وينبغي أن تكون التأكيدات في صلب طريقة الاختبار ، وليس في مكان ما في الجزء الخلفي من المساعدين للاختبار (يقسم السونار بحق عدم وجود تأكيدات).
الأصول حول الحقول أكثر قابلية للفهم من التأكيدات حول الكائنات ، وخاصة حول المجموعات.

في حالة الحقول المتداخلة ، من المنطقي اختبارها بالكامل.

ليس

assertNotNull(order.getCustomer().getName) 

و

 assertNotNull(order) assertNotNull(order.getCustomer()) assertNotNull(order.getCustomer().getName()) 

لا تحقق Assers بغباء ما يتم إرجاعه من الطريقة فحسب ، بل تؤثر عليه. وإذا استطعنا تغييره ، فعلينا تغييره.

من الصعب نسبيًا التأكيد على المجموعات. هل تحتوي على أصفار ، وهل يتم فرزها ، وكيف يتم فرزها بالضبط ، وكيف يتم فحص العناصر من أجل المساواة ، إلخ. - كل هذا يجعل المجموعات كائنات صعبة للتأكيدات ، خاصةً عندما يكون هناك منطق في الطريقة المتعلقة بعناصر المجموعات.

لذلك ، طريقة مثل:

 List<Order> getOrderList(List<OrderDao> orderDaoList){ return orderDaoList.stream().map(orderDao=>order.name(orderDao.getName).build()).collect(Collectors.toList()) } 

من السهل تقسيمها إلى قسمين ، ترتيب محول واحد Dao => ترتيب واختباره بشكل منفصل ، والثاني سيختبر تعيين المجموعات على مخطط الرسم التجريدي ، ويمكننا اختباره على كعب الروتين.

 List<Order> getOrderList(List<OrderDao> orderDaoList, OrderDaoToOrderMapper mapper){ return orderDaoList.stream().map(mapper::map).collect(Collectors.toList()) } 

من ناحية أخرى ، تميل المجموعات إلى الكتابة والتوسعة بشكل جيد ، أي يمكننا بسهولة نسبيًا إنشاء مجموعة من نوعها مع جميع الخصائص التي تم اختبارها ، والمشاركة والمخالفة ، إلخ. لذلك ، بدلاً من قائمة عامة ، يمكننا أن نجعل قائمة الطلب الخاصة بنا ، أو قائمة الطلبات ، أو OrderSortedSet ، وكلما كان الأمر أكثر تحديدًا ، كان ذلك أفضل. وستصبح الاختبارات أسهل.

ليس من الصعب إجراء عبارات حول الدوال أكثر من صعوبة حول الكائنات ، ويتم كتابتها بشكل جيد في بعض اللغات ، لذلك ربما يمكنك أن توصي بالكتابة بشكل أفضل ، على سبيل المثال بدلاً من إرجاع Func <Order، Order> بعض OrderComparator.

Source: https://habr.com/ru/post/ar475276/


All Articles