---
title: Unit Tests
localeTitle: اختبارات الوحدة
---
## اختبارات الوحدة

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

### لماذا افعل ذلك؟

*   **الحماية** - اختبار وحدة يحمي من إدخال الأخطاء الجديدة أو القديمة للبرمجة الدفاعية
*   **الثقة** - يمكنك إضافة تغييرات ، أو إعادة استخدام أو رمز refactor (كلا شائع جدا) وتأكد من أنك لم تقم بإضافة خطأ
*   **الوثائق** - اختبار الوحدة يوثق سلوك وتدفق الكود بحيث يسهل على شخص جديد على الشفرة فهمه
*   **عزل** - يعزل وحدة نمطية من الميزة بأكملها. هذا النهج يفرض عليك التفكير في وحدة بنفسها ، ونسأل عن وظيفتها؟
*   **الجودة** - بما أن اختبار الوحدة يجبرك على التفكير واستخدام API الخاص بك ، فإنه يفرض واجهات وأنماط جيدة / قابلة للتمديد. يمكن أن تشير إلى أي اقتران ضيق أو أكثر من التعقيد التي ينبغي معالجتها. عادة ما يكون اختبار الشفرة أكثر صعوبة بكثير
*   **معيار الصناعة** - اختبار الوحدة هو نظام شائع في هذه الأيام ، وهو مطلب لجزء كبير من شركات البرمجيات
*   **أخطاء أقل** - يقترح بحث كبير أن تطبيق الاختبار على تطبيق يمكن أن يقلل من كثافة علة الإنتاج بنسبة 40٪ - 80٪.

### مثال (في Javascript)

افترض أن هناك وظيفة مكتوبة في ملف **add.js**

 `var add = function(number1, number2){ 
  return number1 + number2; 
 } 
` 

الآن ، من أجل كتابة اختبار الوحدة لهذه الوظيفة تحديدًا ، يمكننا استخدام أدوات الاختبار مثل [mocha](http://mochajs.org/)

 `const mocha = require('mocha') 
 const chai = require('chai')  // It is an assertion library 
 describe('Test to check add function', function(){ 
  it('should add two numbers', function(){ 
    (add(2,3)).should.equal(5)  //Checking that 2+3 should equal 5 using the given add function 
  }); 
 }); 
` 

### التطوير المدفوع بالاختبارات

اختبار الوحدة هو سمة أساسية من سمات نهج التطوير المدفوع بالاختبارات (TDD) لتطوير البرمجيات. في هذا النهج ، يتم كتابة التعليمات البرمجية لميزات معينة أو وظائف من خلال الاستخدام المتكرر لدورة قصيرة للغاية. أولاً ، يكتب المطور مجموعة من الاختبارات التلقائية للوحدة ويضمن فشلها في البداية. بعد ذلك ، يقوم المطور بتطبيق الحد الأدنى من الكود المطلوب من أجل تمرير حالات الاختبار. بمجرد التحقق من أن الشفرة تتصرف كما هو متوقع ، يقوم المطور بعد ذلك بالرجوع ورمز refactors للالتزام بأي معايير الترميز ذات الصلة.

### معلومات اكثر

مارتن فاولر في اختبار الوحدة: [martinfowler.com](https://www.martinfowler.com/bliki/UnitTest.html)

روبرت مارتن الملقب "الدكتور بوب" على TDD: [butunclebob.com](http://www.butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd)

Eric Elliot على اختبارات الوحدة و TDD: [Medium](https://medium.com/javascript-scene/5-common-misconceptions-about-tdd-unit-tests-863d5beb3ce9)