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