v3 / tests /README.md
EGYADMIN's picture
Upload 115 files
82676b8 verified
|
raw
history blame contribute delete
3.94 kB
# اختبارات نظام تسعير المناقصات
يحتوي هذا المجلد على اختبارات وحدة واختبارات تكامل لنظام تسعير المناقصات.
## هيكل المجلد
- `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`.