در این مطلب، ویدئو بیایید یک چارچوب تست واحد در پایتون بسازیم! – قسمت 1 با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:22:52
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,320 –> 00:00:02,240
سلام به همه چه خبر، گرگور اینجاست،
2
00:00:02,240 –> 00:00:04,240
ما نه تنها کدهای این
3
00:00:04,240 –> 00:00:06,720
سری ویدیوی کوچک را تماشا می کنیم، بلکه
4
00:00:06,720 –> 00:00:09,040
چارچوب آزمایشی منحصر به فرد خود را در پایتون در
5
00:00:09,040 –> 00:00:11,599
حدود 100 خط کد می
6
00:00:11,599 –> 00:00:13,920
نویسیم، کدی که می نویسیم کاملاً ساده است
7
00:00:13,920 –> 00:00:15,599
حتی اگر توسعه دهنده پایتون متوسط شما با
8
00:00:15,599 –> 00:00:17,760
د. شاید یک سال تجربه
9
00:00:17,760 –> 00:00:19,760
بتوانید بیشتر آن را دنبال کنید،
10
00:00:19,760 –> 00:00:21,279
بخشهای دشوارتری وجود خواهد داشت،
11
00:00:21,279 –> 00:00:23,840
اما من عمیقا توضیح خواهم داد که هر
12
00:00:23,840 –> 00:00:27,439
خط کد چه کاری انجام میدهد، اجازه دهید
13
00:00:27,760 –> 00:00:30,160
قبل از شروع نوشتن کد شروع کنیم،
14
00:00:30,160 –> 00:00:32,719
ببینیم در واقع یک چارچوب تست واحد چیست.
15
00:00:32,719 –> 00:00:35,440
چارچوب تست میتواند از
16
00:00:35,440 –> 00:00:37,760
چند عنصر تشکیل شده باشد، میتواند شامل یک
17
00:00:37,760 –> 00:00:39,760
اجراکننده آزمایشی باشد، میتواند حاوی یک
18
00:00:39,760 –> 00:00:42,320
کتابخانه جستجوگر باشد و شامل برخی از توابع
19
00:00:42,320 –> 00:00:44,399
برای یک ساختار آزمایشی است که همه
20
00:00:44,399 –> 00:00:46,000
چارچوبهای آزمایشی شامل همه این سه
21
00:00:46,000 –> 00:00:48,480
عنصر نمیشوند، گاهی اوقات فقط اجراکنندههای آزمایشی وجود دارند،
22
00:00:48,480 –> 00:00:50,079
گاهی اوقات چارچوب آزمایشی وجود
23
00:00:50,079 –> 00:00:52,480
ندارد. یک کتابخانه جستجوگر نداریم اما در
24
00:00:52,480 –> 00:00:54,719
پروژه ما سعی خواهیم کرد
25
00:00:54,719 –> 00:00:56,719
هر سه قسمت را در این ویدیو بسازیم در این
26
00:00:56,719 –> 00:00:58,800
قسمت از این مجموعه ما آن را به گونه ای خواهیم ساخت
27
00:00:58,800 –> 00:01:01,120
در ما می توانیم دایرکتوری یا لیستی از
28
00:01:01,120 –> 00:01:04,400
فایل ها را در آنجا ارسال کنیم، تست هایی را که
29
00:01:04,400 –> 00:01:07,040
هر یک از تست
30
00:01:07,040 –> 00:01:08,960
ها را اجرا می کند پیدا می کند و نتایج را چاپ می کند که
31
00:01:08,960 –> 00:01:10,799
آیا تست موفقیت آمیز باشد یا اینکه
32
00:01:10,799 –> 00:01:13,040
شکست بخورد، می توانید
33
00:01:13,040 –> 00:01:14,799
لینک کد منبع را پیدا کنید. که در آن می
34
00:01:14,799 –> 00:01:16,400
توانید تمام نمونه هایی را که
35
00:01:16,400 –> 00:01:18,000
می سازیم پیدا کنید و حالا بیایید شروع به
36
00:01:18,000 –> 00:01:20,560
نوشتن کد کنیم تا در حال حاضر دو فایل
37
00:01:20,560 –> 00:01:22,799
داشته باشیم، یک فایل به نام runner.find داریم
38
00:01:22,799 –> 00:01:24,880
که خالی است و یک فایل با
39
00:01:24,880 –> 00:01:26,960
دو تست داریم که
40
00:01:26,960 –> 00:01:29,280
تست موفقیت آمیز است. که به درستی پاسخ میدهد، ما
41
00:01:29,280 –> 00:01:31,200
شکست تست داریم که ادعای نادرست میکند،
42
00:01:31,200 –> 00:01:33,680
بنابراین این یکی ناموفق خواهد بود، اکنون میخواهیم
43
00:01:33,680 –> 00:01:36,240
این تستها را اجرا کنیم، بنابراین بیایید با
44
00:01:36,240 –> 00:01:38,640
چیزی بسیار ساده شروع کنیم، فقط
45
00:01:38,640 –> 00:01:41,600
این توابع را اجرا میکنیم، بنابراین در runner باید
46
00:01:41,600 –> 00:01:43,840
این توابع را وارد کنیم. تست فراخوانی import را انجام می دهیم
47
00:01:43,840 –> 00:01:45,280
48
00:01:45,280 –> 00:01:47,680
و اکنون این را روی توابع اجرا می کنیم،
49
00:01:47,680 –> 00:01:50,240
50
00:01:53,520 –> 00:01:56,560
بیایید این فایل را اجرا کنیم
51
00:01:57,280 –> 00:01:58,799
و ببینیم که یک خطا داریم،
52
00:01:58,799 –> 00:02:01,360
خطای ادعایی این مورد انتظار است، زیرا
53
00:02:01,360 –> 00:02:02,880
در اینجا شکست تست داریم
54
00:02:02,880 –> 00:02:05,600
که false را نشان می دهد و یک
55
00:02:05,600 –> 00:02:06,799
استثنا ایجاد می کند.
56
00:02:06,799 –> 00:02:08,720
بعد از اینکه یک استثنا پرتاب کرد،
57
00:02:08,720 –> 00:02:11,920
البته بعداً هیچ اتفاقی نمیافتد، بنابراین
58
00:02:11,920 –> 00:02:14,239
برنامه ما اکنون کار نمیکند، باید
59
00:02:14,239 –> 00:02:17,840
آن را بپیچیم تا اگر تستی شکست خورد
60
00:02:17,840 –> 00:02:20,160
، تست دیگر همچنان ادامه داشته باشد، بنابراین
61
00:02:20,160 –> 00:02:25,160
بیایید سعی کنیم یک روش ساده
62
00:02:34,300 –> 00:02:37,449
[Music] اضافه
63
00:02:37,599 –> 00:02:40,080
کنیم. شما تست ما را اجرا کنید، ما
64
00:02:40,080 –> 00:02:42,480
فقط پیام تست شکست خورده را می بینیم که اکنون بسیار عالی است
65
00:02:42,480 –> 00:02:45,040
اگر آزمایش شکست
66
00:02:45,040 –> 00:02:46,800
را متوقف کنیم چیزی چاپ نمی شود، به
67
00:02:46,800 –> 00:02:49,040
این معنی که تست رد شده است، بنابراین در صورت موفقیت آمیز بودن تست، آزمایش را با
68
00:02:49,040 –> 00:02:53,040
موفقیت چاپ خواهیم کرد
69
00:02:56,720 –> 00:02:59,599
و اکنون اگر فقط این تست را اجرا کنید و می
70
00:02:59,599 –> 00:03:01,760
گوید تست با موفقیت انجام شد اما این بخش بسیار
71
00:03:01,760 –> 00:03:04,319
خسته کننده است نه ما نمی خواهیم هر
72
00:03:04,319 –> 00:03:06,239
تابع تست را به اجرا اضافه
73
00:03:06,239 –> 00:03:09,040
74
00:03:09,040 –> 00:03:11,200
75
00:03:11,200 –> 00:03:13,200
کنیم. ایجاد متغیر tests
76
00:03:13,200 –> 00:03:16,200
77
00:03:19,920 –> 00:03:23,360
اکنون می توانیم این کار را انجام دهیم
78
00:03:29,440 –> 00:03:31,920
بنابراین در اینجا test نشان دهنده تابعی است که
79
00:03:31,920 –> 00:03:34,319
ما در متغیر تست نگه
80
00:03:34,319 –> 00:03:36,400
81
00:03:36,400 –> 00:03:38,640
می داریم.
82
00:03:38,640 –> 00:03:40,879
83
00:03:41,200 –> 00:03:43,200
84
00:03:43,200 –> 00:03:45,360
شکست آزمون ما در حال حاضر کاری که می توانیم انجام دهیم این
85
00:03:45,360 –> 00:03:49,280
است که می توانیم بگوییم کدام آزمون را اجرا می
86
00:03:57,120 –> 00:03:58,799
کنیم، می بینیم که ما در حال اجرای آزمون
87
00:03:58,799 –> 00:04:00,640
شکست هستیم و آزمون ها شکست خورده اند اتفاقی که
88
00:04:00,640 –> 00:04:03,599
می افتد این است که موفقیت آزمون ما هرگز
89
00:04:03,599 –> 00:04:05,920
اجرا نمی شود و دلیل آن این است که ما
90
00:04:05,920 –> 00:04:08,000
خطای ادعا داریم. همه چیز
91
00:04:08,000 –> 00:04:10,799
در اینجا وجود دارد، بنابراین به محض اینکه یک تست ناموفق بود، ما
92
00:04:10,799 –> 00:04:13,120
فقط توقف می کنیم و می گوییم تست ناموفق بود
93
00:04:13,120 –> 00:04:14,959
، آن را طوری تغییر می دهیم که هر تست به
94
00:04:14,959 –> 00:04:17,120
طور مستقل اجرا شود و حتی اگر یک تست شکست
95
00:04:17,120 –> 00:04:19,279
بخورد، تست دیگر همچنان اجرا می شود، بنابراین ما
96
00:04:19,279 –> 00:04:20,880
حلقه را به بالای
97
00:04:20,880 –> 00:04:23,880
تابع
98
00:04:29,280 –> 00:04:32,560
و اکنون میتوانیم آن را دوباره اجرا کنیم،
99
00:04:33,040 –> 00:04:35,040
میبینید که اکنون میبینیم که در حال اجرا با شکست تست است
100
00:04:35,040 –> 00:04:37,040
و میگوید تست ناموفق است و سپس
101
00:04:37,040 –> 00:04:39,199
میگوییم اجرای تست موفقیت آمیز بود و میگوییم تست با
102
00:04:39,199 –> 00:04:41,280
موفقیت انجام شد اما این درست نیست
103
00:04:41,280 –> 00:04:43,919
درست یک تست موفق شد اما
104
00:04:43,919 –> 00:04:46,560
تست کلی شکست خورد. بنابراین بیایید یک
105
00:04:46,560 –> 00:04:49,600
متغیر موفقیت در اینجا ایجاد کنیم
106
00:04:50,720 –> 00:04:53,199
و سپس اگر حداقل یک آزمون شکست خورد
107
00:04:53,199 –> 00:04:57,400
، می گوییم موفقیت نادرست است،
108
00:05:13,840 –> 00:05:16,000
اکنون موفقیت داریم درست است و به محض اینکه
109
00:05:16,000 –> 00:05:18,960
یک آزمون شکست می خورد می گوییم موفقیت نادرست است
110
00:05:18,960 –> 00:05:21,360
و در پایان اگر موفقیت نادرست است،
111
00:05:21,360 –> 00:05:23,360
پس ما خواهم گفت تستهای y شکست میخورند، بنابراین اگر حداقل
112
00:05:23,360 –> 00:05:25,520
یکی از تستها ناموفق باشد، میگوییم تست اکنون با شکست مواجه شد،
113
00:05:25,520 –> 00:05:27,919
اگر آن را اجرا کنیم، میبینیم که تست
114
00:05:27,919 –> 00:05:29,600
عملکرد تست شکست خورده است، تست عملکرد تست موفقیتآمیز اجرا میشود
115
00:05:29,600 –> 00:05:31,919
و میبینیم که تستها
116
00:05:31,919 –> 00:05:33,440
شکست میخورند که یک پیشرفت است، اما ما
117
00:05:33,440 –> 00:05:35,919
هنوز این توابع تست را در اینجا داریم. به صراحت نوشته شده است
118
00:05:35,919 –> 00:05:39,600
و اکنون کاری که می خواهیم انجام دهیم این است
119
00:05:39,600 –> 00:05:42,080
که می خواهیم آنها را به طور خودکار پیدا کنیم، بنابراین
120
00:05:42,080 –> 00:05:44,400
بیایید بگوییم که ما تشخیص خواهیم داد که چه
121
00:05:44,400 –> 00:05:48,000
توابعی در این ماژول تست گاو وجود دارد
122
00:05:48,000 –> 00:05:50,320
و تا زمانی که تابع
123
00:05:50,320 –> 00:05:53,520
با کلمه test شروع می شود، آن را یک تابع آزمایشی در نظر می گیریم
124
00:05:53,520 –> 00:05:55,759
. برای انجام این کار از
125
00:05:55,759 –> 00:05:58,160
روشی به نام get Members from inspect
126
00:05:58,160 –> 00:06:00,639
package استفاده می کنیم
127
00:06:03,680 –> 00:06:06,479
get Member به ما این امکان را می دهد که
128
00:06:06,479 –> 00:06:09,120
همه اعضای متغیرها و
129
00:06:09,120 –> 00:06:11,680
تمام توابع را در ماژول که در
130
00:06:11,680 –> 00:06:13,759
آنجا پاس می کنیم پیدا کنیم، بنابراین ماژول تست کشش را در آنجا پاس می کنیم.
131
00:06:13,759 –> 00:06:16,160
ما می گوییم
132
00:06:16,160 –> 00:06:18,639
همه اعضایی را که توابعی هستند
133
00:06:18,639 –> 00:06:21,440
که با خط پایین تست شروع می شوند به ما بدهید و
134
00:06:21,440 –> 00:06:23,680
سپس فرض می کنیم که اینها
135
00:06:23,680 –> 00:06:25,360
تست های واقعی هستند که می خواهیم اجرا
136
00:06:25,360 –> 00:06:26,720
کنیم اگر هرگز از ماژول بازرسی استفاده نکرده اید
137
00:06:26,720 –> 00:06:28,400
مطمئن شوید که برای بررسی
138
00:06:28,400 –> 00:06:30,960
مستندات بسیار جالب است اما فعلا اجازه دهید
139
00:06:30,960 –> 00:06:34,000
ادامه دهیم بنابراین در اینجا می گوییم بازگشت m برای
140
00:06:34,000 –> 00:06:38,720
m در get Members bulltest
141
00:06:38,720 –> 00:06:43,199
اکنون آنچه برمی گرداند این است که هر عضو یک
142
00:06:43,199 –> 00:06:45,440
تاپل است که از نام
143
00:06:45,440 –> 00:06:47,759
عضو و مقدار واقعی تشکیل شده است. ما
144
00:06:47,759 –> 00:06:50,000
در اینجا می خواهیم همه اعضای ماژول نباشند،
145
00:06:50,000 –> 00:06:52,400
ما فقط اعضایی را می خواهیم
146
00:06:52,400 –> 00:06:55,199
که مقدار آنها یک تابع است،
147
00:06:55,199 –> 00:06:58,080
بنابراین اگر
148
00:06:58,080 –> 00:06:59,120
m
149
00:06:59,120 –> 00:07:00,000
150
00:07:00,000 –> 00:07:03,319
1 یک تابع است
151
00:07:03,520 –> 00:07:05,440
و ما فقط آن دسته از توابعی را می خواهیم
152
00:07:05,440 –> 00:07:09,800
که نام با زیر خط تست شروع می شود،
153
00:07:18,000 –> 00:07:20,160
اکنون در اینجا ما می تواند فقط یک تابع را برگرداند
154
00:07:20,160 –> 00:07:22,479
نه یک تاپل، اما در واقع این تاپل
155
00:07:22,479 –> 00:07:24,720
با نام ممکن است مفید باشد، بنابراین بیایید این کار را به
156
00:07:24,720 –> 00:07:27,960
این صورت انجام دهیم
157
00:07:32,560 –> 00:07:34,400
و او می گوید
158
00:07:34,400 –> 00:07:36,960
نام تست
159
00:07:37,360 –> 00:07:41,039
و تابع تست
160
00:07:41,039 –> 00:07:44,400
را اجرا می کند، اجازه دهید آن را اجرا کنیم تا ببینیم چه اتفاقی می افتد
161
00:07:44,400 –> 00:07:46,319
تا ببینید کار می کند اما همچنین در
162
00:07:46,319 –> 00:07:48,160
مقایسه با روش قبلی که ما
163
00:07:48,160 –> 00:07:50,400
آن را اجرا کردیم، می توانید ببینید که نام
164
00:07:50,400 –> 00:07:52,560
تابع قبل از دریافت کل آدرس و غیره زیباتر به نظر می رسد،
165
00:07:52,560 –> 00:07:55,199
اکنون
166
00:07:55,199 –> 00:07:56,879
فقط نام تابع را دریافت می کنیم که یک
167
00:07:56,879 –> 00:07:58,400
امتیاز خوب است که ما هنوز مقداری از آن را از دست می دهیم.
168
00:07:58,400 –> 00:07:59,919
بخشی از اطلاعات در اینجا ما می بینیم که کدام
169
00:07:59,919 –> 00:08:01,599
تست ها در حال اجرا هستند، اما نمی بینیم
170
00:08:01,599 –> 00:08:04,080
که کدام تست دقیقاً شکست خورده است،
171
00:08:04,080 –> 00:08:07,720
بنابراین بیایید رفع کنیم که
172
00:08:12,960 –> 00:08:14,639
اکنون کمی از
173
00:08:14,639 –> 00:08:16,960
کد را کپی کردیم، اما یک
174
00:08:16,960 –> 00:08:19,199
شکست یا موفقیت در اطلاعات خوب داریم، اکنون هنوز
175
00:08:19,199 –> 00:08:21,039
مشکل داریم در اینجا شما ببینید من این
176
00:08:21,039 –> 00:08:24,000
فایل دیگر را دارم که تست عدد نامیده می شود و این
177
00:08:24,000 –> 00:08:26,319
فایل حاوی مجموعه تست های دیگری است که
178
00:08:26,319 –> 00:08:29,599
اگر پایتون رانر را اجرا کنم فقط تست بولی را اجرا می کند،
179
00:08:29,599 –> 00:08:30,960
180
00:08:30,960 –> 00:08:33,599
بنابراین اگر بخواهم تست عدد را اجرا کنم
181
00:08:33,599 –> 00:08:35,839
باید تست کشش را جایگزین کنم. در اینجا
182
00:08:35,839 –> 00:08:38,479
با تست اعداد و من باید آن را
183
00:08:38,479 –> 00:08:41,440
در اینجا جایگزین کنم و اکنون اگر پایتون
184
00:08:41,440 –> 00:08:44,159
رانر را اجرا کنم، تست اعداد را اجرا می کند، اما این
185
00:08:44,159 –> 00:08:47,440
واقعا خسته کننده است، ما نمی خواهیم
186
00:08:47,440 –> 00:08:49,680
ماژول ها را در اینجا کدگذاری سخت کنیم، ما نمی خواهیم
187
00:08:49,680 –> 00:08:51,760
آنها را وارد کنیم. صراحتاً زیرا
188
00:08:51,760 –> 00:08:54,000
ما باید هر بار که یک مد جدید اضافه می کنیم آن را اضافه
189
00:08:54,000 –> 00:08:56,399
کنیم چیزی شبیه به
190
00:08:56,399 –> 00:08:58,959
این است که تست کشش را اینجا اضافه کنید
191
00:08:58,959 –> 00:09:01,760
و باید تست bull اجرا شود البته
192
00:09:01,760 –> 00:09:03,920
در حال حاضر با اجرای تست اعداد کار نمی کند
193
00:09:03,920 –> 00:09:05,760
، بنابراین بیایید آن را انجام دهیم.
194
00:09:05,760 –> 00:09:07,760
اتفاق بیفتد ابتدا یک A را پاس می کنیم rgument به
195
00:09:07,760 –> 00:09:10,800
تابع run ما
196
00:09:10,800 –> 00:09:12,800
همان آرگومان خواهد بود که
197
00:09:12,800 –> 00:09:14,959
از خط فرمان منتقل می شود در حال حاضر ما باید
198
00:09:14,959 –> 00:09:17,920
cis خود را وارد
199
00:09:17,920 –> 00:09:20,480
کنیم و باید این آرگومان را در اینجا اضافه
200
00:09:20,480 –> 00:09:22,399
کنیم تا فایل ما باشد که البته
201
00:09:22,399 –> 00:09:24,880
کاری انجام نخواهد داد بنابراین اکنون داریم برای
202
00:09:24,880 –> 00:09:26,959
تبدیل آن مسیر فایل، باید آن
203
00:09:26,959 –> 00:09:29,760
رشته را با مسیر فایل به یک
204
00:09:29,760 –> 00:09:33,040
ماژول پایتون تبدیل کنیم که یک کد واقعی در نظر گرفته
205
00:09:33,040 –> 00:09:35,920
میشود و قابل اجرا است، این
206
00:09:35,920 –> 00:09:38,240
چالشبرانگیزترین و دشوارترین
207
00:09:38,240 –> 00:09:40,959
بخش این آموزش خواهد بود، بنابراین من اینجا آهسته خواهم رفت.
208
00:09:40,959 –> 00:09:43,440
و گام به گام در مورد
209
00:09:43,440 –> 00:09:45,839
اتفاقی که در حال رخ دادن است با دقت دنبال کنید، می توانیم این را حذف کنیم و
210
00:09:45,839 –> 00:09:47,839
اجازه دهید یک تابع به نام load
211
00:09:47,839 –> 00:09:50,839
212
00:09:50,959 –> 00:09:52,640
module ایجاد کنیم تا این ماژول در
213
00:09:52,640 –> 00:09:56,720
دسترس ما باشد، ما به دو عنصر نیاز داریم اول اینکه
214
00:09:56,720 –> 00:09:59,279
متغیر مکانی است که یک ماژول خواهد بود
215
00:09:59,279 –> 00:10:01,920
دوم یک loader
216
00:10:01,920 –> 00:10:04,480
تابعی است که کل فایل را تجزیه می کند
217
00:10:04,480 –> 00:10:07,440
زیرا می دانید که فقط یک رشته طولانی است
218
00:10:07,440 –> 00:10:10,560
که آن را اجرا می کند و
219
00:10:10,560 –> 00:10:13,040
آن را در کتابخانه استاندارد پایتون متغیر ماژول بسته بندی
220
00:10:13,040 –> 00:10:15,120
می کند که دارای مجموعه ای از
221
00:10:15,120 –> 00:10:18,560
توابع است که به ما امکان می دهد بنابراین
222
00:10:18,560 –> 00:10:20,720
اساساً کاری که میخواهیم انجام دهیم این است که
223
00:10:20,720 –> 00:10:22,880
میخواهیم چیزی مانند آزمایش شماره واردات انجام دهیم،
224
00:10:22,880 –> 00:10:25,279
با این تفاوت که آزمایش شماره واردات، آزمایش عددی خواهد بود
225
00:10:25,279 –> 00:10:28,079
226
00:10:28,079 –> 00:10:31,120
، البته این کار نمیکند، اما ما
227
00:10:31,120 –> 00:10:33,680
از توابعی استفاده خواهیم کرد که دقیقاً مانند آن عمل میکنند،
228
00:10:33,680 –> 00:10:37,680
اجازه دهید ابتدا ما را دریافت کنیم. لودر
229
00:10:37,680 –> 00:10:42,040
برای آن ما از import lib.machinery استفاده خواهیم
230
00:10:53,040 –> 00:10:54,720
کرد ترتیب فایل منبع دو آرگومان می گیرد
231
0