Spaces:
Runtime error
Runtime error
| # اختبارات نظام تسعير المناقصات | |
| يحتوي هذا المجلد على اختبارات وحدة واختبارات تكامل لنظام تسعير المناقصات. | |
| ## هيكل المجلد | |
| - `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`. |