مقدمه ای بر JUnit

آزمایش و تست بخش اساسی تولید نرم افزار است و منجر به افزایش اطمینان پذیری کد و دستورات نوشته شده برنامه نویسان میشود. با وجود کد های تست نوشته شده و اجرای آنها قبل از ارائه نسخه جدید از برنامه باعث می شود تنها خطاهای کوچکی در نرم افزار باقی بماند.

در این مقاله نمیخواهم تمام ویژگی های JUnit را معرفی کنم، اما یک سیر کامل از چگونگی استفاده و اجرای آن را برای توسعه دهندگان جاوا نمایش خواهم داد . سورس کد این برنامه در سایت گیت هاب قابل دریافت خواهد بود.

درک تست ها

قبل از تعریف مجموعه ای از تست ها ما باید فلسفه و دلیل پشت Test Case ها درک کنیم و بدانیم که ظرفیت یا تاثیر حد اکثری آن را بکار بگیریم. زمانی که شما کد یا قطعه ای از برنامه را می نویسید، شما امیدوار هستید آنطور که می خواهید پیش برود. برای مثال اگر شما یک برنامه ماشین حساب را می نویسید، انتظار خواهید داشت در جمع دو عدد 1 و 0 نتیجه برابر با عدد یک باشد. اگر اینطور نبود برنامه شما اشتباه عمل کرده است . به بیان عمومی تر ما با استفاده از Test Case میخواهیم به مشخصه هایی که برنامه با بدست آوردن آنها بدقت و کارایی صحیح دست پیدا میکند را شناسایی خواهیم کرد.


تعریف Test

ما با استفاده از تست میتوانیم میزان دقت برنامه را در موارد استفاده از پیش تعیین شده اش را بسنجیم. در مثال ما برنامه ماشین حساب قرار بود با استفاده از عملیات محاسباتی و این امر نیز از ویژگی ها و قابلیت های اصلی برنامه به شمار می آمد. ما باید آزمایش کنیم که برنامه ما برای وروردی های ثابتی مانند 0و1 نتیجه درستی را باز میگرداند یا خیر.

لازم بذکر است که امروزه در مدیریت تیم های توسعه به صورت AGILE از تست ها یا آزمایش های خودکار استفاده میشود که با پیکربندی و روش های ساده ای میتوانند بعد از هر تغییر به صورت خودکار اجرا شوند . بعد از گذشت دو دهه فریم ورک های فراوانی برای Automated Testing ارائه شد اما JUnit معروفترین آنها در زمان جاری به حساب می آید.




راه اندازی تست ها در پروژه

برای ایجاد پروژه با امکان استفاده از این فریم ورک کافیست تا dependency های زیر را به پروژه اضافه کنیم.


آزمایش یک Feature

اولین گام برای نوشتن تست برنامه ایجاد قابلیت یا feature برای برنامه است. برای مثال برنامه ی ساده ی ماشین حساب را در نظر بگیرید. ماشین حساب در مثال ما تنها یک عمل ساده جمع دو عدد را انجام می دهد.

ایجاد یک Test Case

با ساخت یک کلاس اختصاصی برای رفتار های مورد نیاز تست برنامه ماشین حساب تحت عنوان Calculator Test می توانیم مانند مثال زیر با کمک annotaion ساده ی @Test یک متد ساده تست ایجاد کنیم.

فرایند پیاده سازی شده در این تست شامل گام های زیر است.

  1. Given
  2. When
  3. Then

در مراحل مشحص شده ابتدا از کلاس های مورد نیاز نمونه سازی خواهیم کرد و سپس در مرحله دوم متد مورد نظر را فراخوانی میکنیم و سپس نتیجه را درون حافظه نگه داری می کنیم تا در ادامه با استفاده رفتار های استاندارد تست مانند Assertion جواب یا خروجی متد را راستی آزمایی کنیم.

متد های مختلفی برای راستی آزمایی در تست Case های نوشته شده با استفاده از روش Assertion وجود دارد که در تصویر زیر می توانید آنها را مشاهده کنید.

دوستان عزیز توجه داشته باشید که نتیجه فراخوانی تمامی متدهای فوق در تست Case های نوشته شده در کلاس های تست شما بایستی مقدار True را به عنوان جواب و خروجی در بر داشته باشند. در غیر اینصورت تست های شما Failed خواهد شد.

وابستگی های Mock در تست Case ها

در فرایند اجرای تست نباید فراخوانی متد های کلاس های نوشته شده تاثیرات و تغییرات دائمی و واقعی بروی اطلاعات اصلی سیستم و ... ایجاد کنند. بنابراین باید نسخه ای از کلاس های پایه ی تست های شما در محیط تست استفاده شوند که به صورت واقعی و دائمی بروی اطلاعات و سیستم تاثیر نگذارند و تنها در چرخه اجرای تست به کار گرفته شوند. Mockito بهترین فریم ورک تجربه شده توسط بسیاری از افراد تا به امروز برای ساخت نشخه های Mock از کلاس های شما عزیزان برای استفاده در Test Case ها می باشد.

برای استفاده از این فریم ورک کافیست که تغییرات کمی را مانند شکل زیر در Pom.xml پروژه دلخواه تان انجام دهید.

دوستان عزیز بعد از افزودن این وابستگی یا dependency به پروژه تون میتونین با استفاده از متد mock() از کلاس Mockito از کلاس های پایه ی مورد استفاده در Test Case هاتون با خیال راحت تست های مورد نظرتون رو اجرا کنید درست هونطور که در شکل زیر مشاهده می کنید.

برای مطالعه بیشتر در خصوص این فریم ورک عالی پیشنهاد می کنم به سایت رسمی مستندات Mockito مراجعه کنید.


اجرای تست ها به صورت دستی

در صورتی که از ابزار maven در پروژه هاتون استفاده میکنید کافیه دستور mvn test رو در ترمینال اجرا کنید .

در صورتیکه از ابزار Intelij IDEA استفاده میکنید هم میتوانید مثل تصویر زیر عمل کنین.

نتیجه گیری

یه برنامه نویس خوب همیشه سعی می کنه برای برنامه هاش تست بنویسه.

شاد باشین دوستان و همیشه تو حوزه برنامه نویسی با زبان های شی گرا رو کمک حامد سهامی دوستدار شما عزیزان در واتس آپ و لینکدین حساب کنید.