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