File size: 3,935 Bytes
82676b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# اختبارات نظام تسعير المناقصات

يحتوي هذا المجلد على اختبارات وحدة واختبارات تكامل لنظام تسعير المناقصات.

## هيكل المجلد

- `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`.