Telegram Group & Telegram Channel
تست نویسی رو دستکم نگیرید
از کانال per3onal

برای اینکه تست بنویسید :

خیلی وقت بود جنگو کد نزده بودم و یک سری موارد رو فراموش کرده بودم (مواردی که مربوط میشه فقط و فقط به خود جنگو)
خیلی هم اعتقادی به TDD ندارم ولی معتقدم تست نویسی باید باشه؛ حالا که بحثش شد بذار بگم تا همین چندسال قبل بدون TDD کد نمیزدم؛ اما یک عیب بزرگ داشتم  TDD فقط و فقط وقتی درست عمل می‌کنه که شما تمام نیاز بیزینس رو بدونی و دقیقا بدونی چطور قراره از سیستم استفاده بشه.
حالا نگیم ۱۰۰٪ حداقل ۸۰٪ پروژه رو باید کامل بدونید؛ باگش در اومد دیگه بیزینسی جز بیزینس خودت وجود نداره که ۸۰٪ اش مشخص باشه. تغییرات بسیار است.

بگذریم؛ کد رو زدم و تموم شد و با Insomnia, bruno تستش کردم (bruno رو هنوز خیلی بلدش نیستم ولی باید یادبگیرم که خب درحال حاضر وقتش نیست برای همین رکوئست‌هایی که مهم نیست رو export-import میزنم بین این دوتا ابزار)
همه چیز به خوبی کار می‌کرد که رفتم سراغ تست نویسی؛ همه تست‌ها به خوبی کار می‌کرد جز یک مورد
یک generic.CreateAPIView یا views.APIView هرکاری میکردم توی یکی از تست‌های خاص جواب نمی‌داد جالبتر این بود که دقیقا همین تست توی Insomnia داشت جواب میداد؛ اونم بطور کامل و درست؛ دیباگر هم حتی هیچی نشون نمیداد.
من توی این Endpoint فقط می‌خواستم یک دیتایی رو دریافت کنم Deserialize کنم بعد با اون چیزی که توی دیتابیس دارم مقایسه کنم که یا تایید بدم یا ارور بدم.

خلاصه‌اش کنم:
نهایتا متوجه شدم روی model و یکی از فیلدها محدودیت unique=True گذاشتم و توی Insomnia دارم اون فیلد رو با دیتای متفاوتی از چیزی که توی دیتابیس ایجاد کردم صدا میزنم همینجا یادآوری شد که :

serializer.is_valid()

قبل از اینکه validate کاستوم شده شما رو اجرا کنه میره چک می‌کنه آیا دیتا رو اگر بخواد validate کنه دیتابیس بهش تایید میده یا نه.
(تابع نرمالایز کردن اون فیلد خاص رو من توی
validate مربوط به serializer صدا میزدم؛ چون توی تمام فریمورک‌های استاندارد ولید کردن اول باید توی serializer صورت بگیره و محدودیت‌های دیتابیس Fallback هستند.)

خلاصه که چون توی تست‌هام از faker استفاده می‌کن (اینم خودش یک best practice هست که باید رعایت بشه) توی هر دو endpoint اون فیلد بصورت دقیقا یکسان ارسال می‌شد و باگ در اومد و با یک redesign کوچیک همه جیز درست شد.

اگر این تست نبود:
۱- من باقی بخش‌های پروژه رو با دیزاینی که باگ داشت کد زده بودم
۲- باگ خودش رو نشون نمی‌داد مگر توی stage, production توی محیط تست قطعا بازم با همین استاندارد که بذار normalization رو هم همزمان تست کنم همه چیز ادامه پیدا میکرد.
۳- درست کردن این باگ حتی اگر برای هفته بعدی هم می‌افتاد؛ حداقل ۵-۶ روزکاری زمان می‌برد تا مشکلش رو بتونیم حل کنیم.
بخاطر حجم داده و حجم کد و dependency هایی که بوجود میومد (چیزی که الان کمتر از ۱ ساعت وقت گرفت با یک redesign کامل)


تست نویسی رو دستکم نگیرید واقعا.



tg-me.com/djangolearn_ir/954
Create:
Last Update:

تست نویسی رو دستکم نگیرید
از کانال per3onal

برای اینکه تست بنویسید :

خیلی وقت بود جنگو کد نزده بودم و یک سری موارد رو فراموش کرده بودم (مواردی که مربوط میشه فقط و فقط به خود جنگو)
خیلی هم اعتقادی به TDD ندارم ولی معتقدم تست نویسی باید باشه؛ حالا که بحثش شد بذار بگم تا همین چندسال قبل بدون TDD کد نمیزدم؛ اما یک عیب بزرگ داشتم  TDD فقط و فقط وقتی درست عمل می‌کنه که شما تمام نیاز بیزینس رو بدونی و دقیقا بدونی چطور قراره از سیستم استفاده بشه.
حالا نگیم ۱۰۰٪ حداقل ۸۰٪ پروژه رو باید کامل بدونید؛ باگش در اومد دیگه بیزینسی جز بیزینس خودت وجود نداره که ۸۰٪ اش مشخص باشه. تغییرات بسیار است.

بگذریم؛ کد رو زدم و تموم شد و با Insomnia, bruno تستش کردم (bruno رو هنوز خیلی بلدش نیستم ولی باید یادبگیرم که خب درحال حاضر وقتش نیست برای همین رکوئست‌هایی که مهم نیست رو export-import میزنم بین این دوتا ابزار)
همه چیز به خوبی کار می‌کرد که رفتم سراغ تست نویسی؛ همه تست‌ها به خوبی کار می‌کرد جز یک مورد
یک generic.CreateAPIView یا views.APIView هرکاری میکردم توی یکی از تست‌های خاص جواب نمی‌داد جالبتر این بود که دقیقا همین تست توی Insomnia داشت جواب میداد؛ اونم بطور کامل و درست؛ دیباگر هم حتی هیچی نشون نمیداد.
من توی این Endpoint فقط می‌خواستم یک دیتایی رو دریافت کنم Deserialize کنم بعد با اون چیزی که توی دیتابیس دارم مقایسه کنم که یا تایید بدم یا ارور بدم.

خلاصه‌اش کنم:
نهایتا متوجه شدم روی model و یکی از فیلدها محدودیت unique=True گذاشتم و توی Insomnia دارم اون فیلد رو با دیتای متفاوتی از چیزی که توی دیتابیس ایجاد کردم صدا میزنم همینجا یادآوری شد که :

serializer.is_valid()

قبل از اینکه validate کاستوم شده شما رو اجرا کنه میره چک می‌کنه آیا دیتا رو اگر بخواد validate کنه دیتابیس بهش تایید میده یا نه.
(تابع نرمالایز کردن اون فیلد خاص رو من توی
validate مربوط به serializer صدا میزدم؛ چون توی تمام فریمورک‌های استاندارد ولید کردن اول باید توی serializer صورت بگیره و محدودیت‌های دیتابیس Fallback هستند.)

خلاصه که چون توی تست‌هام از faker استفاده می‌کن (اینم خودش یک best practice هست که باید رعایت بشه) توی هر دو endpoint اون فیلد بصورت دقیقا یکسان ارسال می‌شد و باگ در اومد و با یک redesign کوچیک همه جیز درست شد.

اگر این تست نبود:
۱- من باقی بخش‌های پروژه رو با دیزاینی که باگ داشت کد زده بودم
۲- باگ خودش رو نشون نمی‌داد مگر توی stage, production توی محیط تست قطعا بازم با همین استاندارد که بذار normalization رو هم همزمان تست کنم همه چیز ادامه پیدا میکرد.
۳- درست کردن این باگ حتی اگر برای هفته بعدی هم می‌افتاد؛ حداقل ۵-۶ روزکاری زمان می‌برد تا مشکلش رو بتونیم حل کنیم.
بخاطر حجم داده و حجم کد و dependency هایی که بوجود میومد (چیزی که الان کمتر از ۱ ساعت وقت گرفت با یک redesign کامل)


تست نویسی رو دستکم نگیرید واقعا.

BY جنگولرن


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/djangolearn_ir/954

View MORE
Open in Telegram


جنگولرن Telegram | DID YOU KNOW?

Date: |

The lead from Wall Street offers little clarity as the major averages opened lower on Friday and then bounced back and forth across the unchanged line, finally finishing mixed and little changed.The Dow added 33.18 points or 0.10 percent to finish at 34,798.00, while the NASDAQ eased 4.54 points or 0.03 percent to close at 15,047.70 and the S&P 500 rose 6.50 points or 0.15 percent to end at 4,455.48. For the week, the Dow rose 0.6 percent, the NASDAQ added 0.1 percent and the S&P gained 0.5 percent.The lackluster performance on Wall Street came on uncertainty about the outlook for the markets following recent volatility.

How to Invest in Bitcoin?

Like a stock, you can buy and hold Bitcoin as an investment. You can even now do so in special retirement accounts called Bitcoin IRAs. No matter where you choose to hold your Bitcoin, people’s philosophies on how to invest it vary: Some buy and hold long term, some buy and aim to sell after a price rally, and others bet on its price decreasing. Bitcoin’s price over time has experienced big price swings, going as low as $5,165 and as high as $28,990 in 2020 alone. “I think in some places, people might be using Bitcoin to pay for things, but the truth is that it’s an asset that looks like it’s going to be increasing in value relatively quickly for some time,” Marquez says. “So why would you sell something that’s going to be worth so much more next year than it is today? The majority of people that hold it are long-term investors.”

جنگولرن from nl


Telegram جنگولرن
FROM USA