# اختبارات نظام تسعير المناقصات يحتوي هذا المجلد على اختبارات وحدة واختبارات تكامل لنظام تسعير المناقصات. ## هيكل المجلد - `unit/`: اختبارات الوحدة للمكونات الفردية - `integration/`: اختبارات التكامل بين مكونات النظام المختلفة ## تشغيل الاختبارات ### تشغيل جميع الاختبارات لتشغيل جميع الاختبارات، قم بتنفيذ الأمر التالي من المجلد الرئيسي للمشروع: ```bash python -m unittest discover -s tests ``` ### تشغيل اختبارات الوحدة فقط ```bash python -m unittest discover -s tests/unit ``` ### تشغيل اختبارات التكامل فقط ```bash python -m unittest discover -s tests/integration ``` ### تشغيل ملف اختبار محدد ```bash python -m unittest tests/unit/test_reports.py ``` ## كتابة اختبارات جديدة ### اختبارات الوحدة اختبارات الوحدة تركز على اختبار مكون واحد معزول عن باقي النظام. يجب اتباع النمط التالي: ```python import unittest class TestComponentName(unittest.TestCase): def setUp(self): # إعداد بيئة الاختبار pass def tearDown(self): # تنظيف بيئة الاختبار pass def test_functionality_name(self): # اختبار وظيفة معينة result = function_to_test(params) self.assertEqual(result, expected_value) ``` ### اختبارات التكامل اختبارات التكامل تركز على التفاعل بين مكونين أو أكثر. يجب اتباع النمط التالي: ```python import unittest class TestIntegrationName(unittest.TestCase): def setUp(self): # إعداد بيئة الاختبار # إنشاء المكونات المختلفة المطلوبة pass def tearDown(self): # تنظيف بيئة الاختبار pass def test_integration_scenario(self): # اختبار سيناريو تكامل محدد result = component1.action(params) component2.process(result) final_result = component2.get_result() self.assertEqual(final_result, expected_value) ``` ## المحاكاة والاستبدال في بعض الحالات، قد نحتاج إلى محاكاة بعض المكونات لعزل المكون الذي نختبره. يمكن استخدام مكتبة `unittest.mock` لهذا الغرض: ```python from unittest.mock import Mock, patch class TestWithMocking(unittest.TestCase): @patch('module.ClassName') def test_with_mock(self, MockClass): # إعداد المحاكاة instance = MockClass.return_value instance.method.return_value = 'mocked_result' # استدعاء الدالة التي تستخدم الكائن المحاكى result = function_to_test() # التحقق من النتائج ومن استدعاء المحاكاة self.assertEqual(result, expected_value) instance.method.assert_called_once_with(expected_params) ``` ## التغطية يمكن قياس تغطية الاختبارات باستخدام أداة `coverage`: ```bash # تثبيت أداة coverage pip install coverage # تشغيل الاختبارات مع قياس التغطية coverage run -m unittest discover -s tests # عرض تقرير التغطية coverage report # إنشاء تقرير HTML للتغطية coverage html ``` ملف تقرير HTML سيكون في مجلد `htmlcov/index.html`.