TGViewer
DotNetZoom DotNetZoom @dotnetzoom · 2.82K subscribers
Post #1150 2.81K
✅ تست های شما باید ایزوله باشند

در حالت ایده آل، یک تست باید "کاملا" از سایر تست ها "ایزوله" باشه.
این امر موجب میشه تست ها هیچ تاثیری (side effect) روی هم نداشته باشند و ترتیب اجراشونم به هم بستگی نداشته باشه در نتیجه میتونیم براحتی اون ها رو به صورت موازی (Parallel) اجرا کنیم

این امر در بر نامه های وب مخصوصا از اهمیت بیشتری برخوردار میشه چرا که به دلیل ماهیت برنامه های وب، که درخواست ها به صورت موازی اجرا میشن، موازی اجرا شدن تست ها باعث میشه اطمینان خاطر بیشتری به عملکرد کد ها پیدا کنیم

مثلا فرض کنید برنامه نویسی اشتباها از روشی توی کدش استفاده کرده باشه که side effect داره (مثلا ذخیره Username کاربر جاری تو یه متغیر "static") در این صورت با موازی اجرا کردن تست ها به خطا میخوریم و متوجه ایراد کار میشیم ولی با اجرای ترتیبی (Sequential) خیر

اینکه چطور توابع side-effect free (بدون تاثیر جانبی) و بالا تر از اون pure functions (توابع خالص) ایجاد کنیم از مباحث Functional Programming (به اختصار FP) هست که اکیدا پیشنهاد میکنم اونها رو مطالعه کنید

در حالت ایده آل هیچ تستی نباید به نتیجه تست قبلیش وابستگی داشته باشه یا تاثیری روی تست بعدی بگذاره
از طرفی یه تست زمان بر، انگیزه برنامه نویس برای اجرا تست رو به شدت کم میکنه
اگه 1000 تا تست داشته باشید که هر کدوم 1ثانیه طول میکشه، ترتیبی بودنش 16 دقیقه زمان میبره در صورتی که موازی بودنش (با فرض اینکه pc شما 8 عدد logical processor یا thread واقعی داره) این زمان به 2 دقیقه کاهش پیدا میکنه

پس توصیه میکنم همیشه سعی تون بر این باشه که تست ها کاملا ایزوله باشن و به صورت Parallel اجرا بشن مگر جایی که واقعا راهی وجود نداشته باشه

▪️در این ویدئو نیز Kent Beck (خالق متدولوژی XP و روش TDD) در مورد اهمیت و چرایی این موضوع صحبت میکنه
Tests Should Be Isolated (from each other)
__________________
@DotNetZoom
YouTube Test Desiderata 8/12: Tests Should Be Isolated (from each other) Whether one test passes or not should have no effect on whether another test passes. You can ensure this by either: 1. Only using locally initialized state ...
More from @dotnetzoom
  1. Dec 27, 2021امکانات LINQ در NET 6. ✅ ۱- امکان مشخص کردن مقدار پیش‌فرض در OrDefault* var item1 = list1.…
  2. Dec 6, 2021انتقال داده ها به واسطه Azure Service Bus امروزه سرعت انتقال داده‌ها از اهمیت بالایی برخور…
  3. Nov 29, 2021اضافه شدن قابلیت Temporal Table به EF Core 6 ➖ مایکروسافت در سال 2016 قابلیت Temporal Tabl…
  4. Nov 10, 2021همه چیز در مورد NET Core 6. دیروز نسخه رسمی NET Core 6. به همراه نسخه رسمی Visual Studio 2…
  5. Nov 10, 2021نسخه نهایی NET 6.0 منتشر شد. نسخه 6.0 دات نت به صورت طولانی مدت پشتیبانی میشود (LTS) و توس…
  6. Nov 8, 2021کنفرانس NET. Conf هر سال خبرهای هیجان‌انگیزی داره. امسال هم NET. خبر های خوب و جذابی داره…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →