Telegram Group & Telegram Channel
#سی_شارپ
#تست
#آزمایشگاه

یکی از ابزارهای تست ابزار Mock کردن تست هاست، ابزارهایی توی سی شارپ و زبان های برنامه نویسی وجود دارن که شما میتونید باهاشون مدل های آزمایشگاهی خودتون رو کمی به واقعیت نزدیک کنید و برای پروژه خودتون تست بنویسید.
اما آیا این تست ها 100% واقعی بودن و به واقعیت نزدیک بودن تست شمارو تضمین میکنن؟ خیر، آیا تا بحال بهش فکر کردید؟ چقدر فرق میکنن؟
ببینید توی تست های Mock چند تا اتفاق بد میوفته:
1.شما حتما باید یک فضای اضافی برای Mock کردن کلاس هاتون بسازید، این یعنی اینکه حتما مجبورید برای نوشتن Mock اینترفیس داشته باشید و حتما کلاس های اصلی پروژه تون درگیر داشتن اینترفیس هایی میشن که میتونستن هیچوقت وجود نداشته باشن. یعنی باید برنامه نویسی کنید.
از نظر من تست بالاترین لایه ی سیستم هست، معماری پروژه شما نباید بدونه شما دارید براش تست می نویسید، در نتیجه نباید کدهای لایه ی پایین اپلیکیشن خودتون رو درگیر کد های لایه بالاتر کنید، این یعنی پیچیدگی و پیچیدگی = مرگ
فرض رو بر این بگیرید که اصلا قرار نیست پروژه های سطح پایین درگیر خراب کاری هایی که شما سمت تست می کنید بشن.حالا چیکار میکنید؟
2.فرایندها به طور 100% واقعی تست نمیشن، مثلا وقتی شما یک سرور خارجی رو به صورت Rest صدا میزنید این سرور ممکنه خروجی xml یا json داشته باشه آیا همه ی فرایند های serialize و deserialize و post و get و ارتباط های شبکه ای شما هم با سرور مورد نظر تست میشه؟ Exception های اون سرور چطور؟ هیچ کدوم؟ پس این سرور mock فقط قراره یه سری داده رو بگیره و بفرسته؟ همون ورودی و خروجی های خودمون؟

اگر هنوز فکر میکنید دارم اغراق میکنم سر بزنید به لینک زیر تا ببینید چرا برنامه نویس ها نمیتونن یک کلاس HttpClient رو Mock کنند و دست به دامن تغییرات زیادی توی کدهاشون شدن:
https://stackoverflow.com/questions/36425008/mocking-httpclient-in-unit-tests

حالا اینارو گفتم که بعدش چه چیزی گفته باشم؟
ما توی شرکتمون ابزاری ایجاد کردیم به نام Laboratory و نام مدل های آزمایشگاهی اونو گذاشتیم Mockup کاری که این ابزار میکنه اینه که به صورت 100% فرایند تست Mock شمارو تضمین میکنه و به شکل یک سرور واقعی اما به صورت مجازی موقع تست های شما در پشت صحنه اجرا میشه و تمامی فرایند های پروژه شما از ابتدا تا انتها و حتی بعد از HttpClient ها و ... جایی که حتی Header ها رو میتونید برگردونید جایی که دقیقا یک پورت http گوش بزنگه تا httpClient شما بهش رکوئست بزنه تا به صورت واقعی درخواست های xml یا json یا ... رو به سرویس های شما برگردونه.
حالا دیگه نه نیازی دارید interface های اضافه بسازید، نه نیاز دارید که حتی یک خط اضافه توی لاجیک هاتون به خاطر Mock کردن پروژه بزنید اعم از ساختن interface ها یا حتی تغییرکد ها توی تست کیس ها تنها کاری که میکنید یه سری Resource میسازید تا در فرایند تست سرور به صورت مجازی لود بشه و داده هارو مجازی سازی کنه.

@csharptips



tg-me.com/CsharpTips/278
Create:
Last Update:

#سی_شارپ
#تست
#آزمایشگاه

یکی از ابزارهای تست ابزار Mock کردن تست هاست، ابزارهایی توی سی شارپ و زبان های برنامه نویسی وجود دارن که شما میتونید باهاشون مدل های آزمایشگاهی خودتون رو کمی به واقعیت نزدیک کنید و برای پروژه خودتون تست بنویسید.
اما آیا این تست ها 100% واقعی بودن و به واقعیت نزدیک بودن تست شمارو تضمین میکنن؟ خیر، آیا تا بحال بهش فکر کردید؟ چقدر فرق میکنن؟
ببینید توی تست های Mock چند تا اتفاق بد میوفته:
1.شما حتما باید یک فضای اضافی برای Mock کردن کلاس هاتون بسازید، این یعنی اینکه حتما مجبورید برای نوشتن Mock اینترفیس داشته باشید و حتما کلاس های اصلی پروژه تون درگیر داشتن اینترفیس هایی میشن که میتونستن هیچوقت وجود نداشته باشن. یعنی باید برنامه نویسی کنید.
از نظر من تست بالاترین لایه ی سیستم هست، معماری پروژه شما نباید بدونه شما دارید براش تست می نویسید، در نتیجه نباید کدهای لایه ی پایین اپلیکیشن خودتون رو درگیر کد های لایه بالاتر کنید، این یعنی پیچیدگی و پیچیدگی = مرگ
فرض رو بر این بگیرید که اصلا قرار نیست پروژه های سطح پایین درگیر خراب کاری هایی که شما سمت تست می کنید بشن.حالا چیکار میکنید؟
2.فرایندها به طور 100% واقعی تست نمیشن، مثلا وقتی شما یک سرور خارجی رو به صورت Rest صدا میزنید این سرور ممکنه خروجی xml یا json داشته باشه آیا همه ی فرایند های serialize و deserialize و post و get و ارتباط های شبکه ای شما هم با سرور مورد نظر تست میشه؟ Exception های اون سرور چطور؟ هیچ کدوم؟ پس این سرور mock فقط قراره یه سری داده رو بگیره و بفرسته؟ همون ورودی و خروجی های خودمون؟

اگر هنوز فکر میکنید دارم اغراق میکنم سر بزنید به لینک زیر تا ببینید چرا برنامه نویس ها نمیتونن یک کلاس HttpClient رو Mock کنند و دست به دامن تغییرات زیادی توی کدهاشون شدن:
https://stackoverflow.com/questions/36425008/mocking-httpclient-in-unit-tests

حالا اینارو گفتم که بعدش چه چیزی گفته باشم؟
ما توی شرکتمون ابزاری ایجاد کردیم به نام Laboratory و نام مدل های آزمایشگاهی اونو گذاشتیم Mockup کاری که این ابزار میکنه اینه که به صورت 100% فرایند تست Mock شمارو تضمین میکنه و به شکل یک سرور واقعی اما به صورت مجازی موقع تست های شما در پشت صحنه اجرا میشه و تمامی فرایند های پروژه شما از ابتدا تا انتها و حتی بعد از HttpClient ها و ... جایی که حتی Header ها رو میتونید برگردونید جایی که دقیقا یک پورت http گوش بزنگه تا httpClient شما بهش رکوئست بزنه تا به صورت واقعی درخواست های xml یا json یا ... رو به سرویس های شما برگردونه.
حالا دیگه نه نیازی دارید interface های اضافه بسازید، نه نیاز دارید که حتی یک خط اضافه توی لاجیک هاتون به خاطر Mock کردن پروژه بزنید اعم از ساختن interface ها یا حتی تغییرکد ها توی تست کیس ها تنها کاری که میکنید یه سری Resource میسازید تا در فرایند تست سرور به صورت مجازی لود بشه و داده هارو مجازی سازی کنه.

@csharptips

BY C# Programming Guide




Share with your friend now:
tg-me.com/CsharpTips/278

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

What is Telegram?

Telegram’s stand out feature is its encryption scheme that keeps messages and media secure in transit. The scheme is known as MTProto and is based on 256-bit AES encryption, RSA encryption, and Diffie-Hellman key exchange. The result of this complicated and technical-sounding jargon? A messaging service that claims to keep your data safe.Why do we say claims? When dealing with security, you always want to leave room for scrutiny, and a few cryptography experts have criticized the system. Overall, any level of encryption is better than none, but a level of discretion should always be observed with any online connected system, even Telegram.

What Is Bitcoin?

Bitcoin is a decentralized digital currency that you can buy, sell and exchange directly, without an intermediary like a bank. Bitcoin’s creator, Satoshi Nakamoto, originally described the need for “an electronic payment system based on cryptographic proof instead of trust.” Each and every Bitcoin transaction that’s ever been made exists on a public ledger accessible to everyone, making transactions hard to reverse and difficult to fake. That’s by design: Core to their decentralized nature, Bitcoins aren’t backed by the government or any issuing institution, and there’s nothing to guarantee their value besides the proof baked in the heart of the system. “The reason why it’s worth money is simply because we, as people, decided it has value—same as gold,” says Anton Mozgovoy, co-founder & CEO of digital financial service company Holyheld.

telegram from id


Telegram C# Programming Guide
FROM USA