<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mostafa Hemmati</title>
        <link>https://virgool.io/feed/@mostafa.hemmati1362</link>
        <description>توسعه دهنده اندروید</description>
        <language>fa</language>
        <pubDate>2026-06-16 12:06:15</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/35785/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Mostafa Hemmati</title>
            <link>https://virgool.io/@mostafa.hemmati1362</link>
        </image>

                    <item>
                <title>آموزش JUnit</title>
                <link>https://virgool.io/@mostafa.hemmati1362/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-junit-tiqlkr1f7xtu</link>
                <description>  تست نرم افزار چیست؟تست نرم افزار فرآیند اجرای یک برنامه با هدف پیدا کردن اشکالات نرم افزاری است. چرا تست نرم افزار ها امری ضروری است؟ شناسایی خطا ها و نقص های نرم افزار در مراحل توسعهتضمین رضایت و اعتماد مشتری به برنامهاطمینان از کیفیت محصولارائه امکانات با کیفیت به مشتریان و حصول نتایج بهترپایین آمدن هزینه های رفع خطااجرای موثر برنامه کاربردی نرم افزار یا محصولحصول اطمینان از اینکه برنامه به هیچ گونه خرابی منجر نمی شود، زیرا در آینده یا در مراحل بعدی توسعه این مسئله می تواند بسیار گران تمام شود.ثابت نگه داشتن شرایط کسب وکار معرفی تست واحد (Unit testing)تست واحد، مجموعه‌ای از تست‌ها است که برای کوچکترین «واحد»های برنامه، یعنی متدها و کلاس‌ها نوشته می‌شود. می‌خواهیم مطمئن شویم که همه اجزا یا واحدهای برنامه به درستی کار می‌کنند. مثلاً اگر متدی داریم که قرار است دو عدد را به عنوان پارامتر بگیرد و حاصل جمع آن‌ها را به ما برگرداند، ما همواره تست می‌کنیم که ببینیم آیا این متد کاری که قرار است انجام دهد را به درستی انجام می‌دهد یا نه. بیشترین حجم تست برنامه، همین «تست واحد»ها هستند. نوشتن آن‌ها بسیار ضروری اما بسیار ساده است. اگر همه تست‌های واحد با موفقیت انجام شود، ما نمی‌توانیم مطمئن شویم که برنامه به درستی کار می‌کند اما اگر یکی از آن‌ها شکست بخورد، مطمئن می‌شویم که برنامه در اجرا به مشکل خواهد خورد. مزایای تست واحد  بررسی نحوه ی عملکرد کد هابه روز رسانی کد های تغییر یافته اشتراک گذاری آسان کد هاارزیابی انتظارات برنامه نویستسهیل کدخوانی و refactoringجلوگیری از پیدایش مجدد باگ هاکاهش زمان و هزینه ی رفع اشکالاجرای چند تست در زمان کم کدام بخش نرم افزار بایستی تست شود اینکه دقیقا می بایست چه بخش هایی تست شود، یک موضوع بسیار بحث برانگیز است. برخی از توسعه دهندگان بر این عقیده هستند که تمامی دستورات داخل کد می بایست مورد بررسی قرار گرفته و تست شود. به هر حال شما بایستی برای بخش های پیچیده و حساس نرم افزار خود تست بنویسید. اگر ویژگی و قابلیت های جدید به اپلیکیشن خود اضافه نمایید، آنگاه یک مجموعه تست قدرتمند و کارامد می تواند اپلیکیشن شما را در برابر ضعف و خطاهایی که ممکن است بعدها به داخل اپلیکیشن و کد جاری راه پیدا کنند محافظت خواهد کرد. در طراحی تست نرم افزاری می توان بخش های جزئی از کد را نادیده گرفت. برای مثال، نوشتن تست برای متدهای getter و setter که صرفا مقادیری را به فیلدهایی تخصیص می دهند، تقریبا بیهوده است. در واقع نوشتن تست برای تمامی دستورات داخل کد مشخصا بسیار زمان بر بوده و تقریبا امری بی فایده می باشد چرا که شما اپلیکیشن را در بستر JVM تست می کنید. JVM به خودی خود test case هایی از پیش تعریف شده و مشخص دارد. در صورت طراحی تست برای بخش هایی از برنامه که قبلا تستی برای آن ها نوشته نشده، بهتر است ابتدا برای  بخش هایی از کد، تست طراحی شود که دفعات رخداد خطا در گذشته در آن ها زیاد باشد. سپس می توانید بر روی بخش های اساسی کد متمرکز شوید. آشنایی با فریم ورک JUnit حالا دیگر با مفهوم تست واحد آشنا هستید. در اندروید برای تست واحد معمولاً از ابزارهای متنوعی استفاده می‌شود که معروف‌ترین آن‌ها JUnit است. JUnit چارچوبی ساده برای نوشتن تست‌ است که نسخه‌های متعددی از آن برای زبان‌های مختلف وجود دارد و J در ابتدای نام آن اشاره به زبان جاوا است.کدهای تست را باید در کجا بنویسیم برای این که بتوانیم برای برنامه تست بنویسیم و تست‌ها را اجرا کنیم باید تغییراتی در برنامه بدهیم. اگر یک پروژه جدید ادر اندروید استودیو بسازید، به طور پیش‌فرض دو شاخه در ساختار پروژه می‌سازد:شاخه androidTest همه تست‌های UI در این شاخه قرار می‌گیرند. شاخه test : تست‌های واحد در این شاخه قرار دارند. این تست‌ها در JVM یا همان ماشین مجازی جاوا اجرا می‌شوند و نیازی به دستگاه اندروید یا شبیه‌ساز ندارند. در این تست‌ها نمی‌توانید از مؤلفه‌های اصلی اندروید مثل Activity یا Context استفاده کنید.نحوه پیاده سازی تست در JUnit می خواهیم نحوه ی استفاده از این توابع را در یک مثال ببینیم.فرض کنیم کلاسی داریم که عملیات ضرب و تقسیم را انجام می دهد. می خواهیم برای تست توابع این کلاس از JUnit استفاده کنیم. در ادامه کد کلاس آمده است : کد کلاس Math اگر بخواهیم تابع تقسیم این کلاس را تست کنیم، می توانیم تابع تست زیر را بنویسیم . در این تابع ابتدا از کلاس مورد نظر یک نمونه ایجاد می کنیم(خط 13)سپس مقدار حاصل از تابع division را با مقدار مورد انتظارمان تطبیق می دهیم(خط 14).در ادامه هم  بررسی می کنیم در صورتی که مخرج کسر صفر باشد خطای مورد انتظار ما رخ می دهد یا خیر ؟(خط 15 تا 20) برای این کار  تابع division را با مخرج صفر اجرا می کنیم، اگر تابع درست عمل کند بعد از اجرای تابع برنامه باید وارد catch شود ، اگر این اتفاق نیفتد یعنی تابع درست عمل نکرده است  پس به صورت دستی با فراخوانی تابع fail() تابع تست را fail می کنیم. در صورتی هم که واردcatch شود بررسی می کنیم نوع خطا همان نوع مد نظر ما است یا خیر ؟ تمام موارد توضیح داده شده را در کد زیر می بینید : کد تست تابع division قرارداد روش های نام گذاری تست های مبتنی بر JUnit قراردادهای نام گذاری متعددی برای تخصیص اسم به تست های طراحی شده بر اساس فریم ورک JUnit وجود دارد. یک راه حل پر طرفدار افزودن پسوند &quot;-test&quot; به اسم کلاس های تست (test case) و جایگذاری آن ها در پکیج جدید &quot;test&quot; می باشد.به طور کلی، اسم تست باید درباره ی کاربرد و مورد استفاده ی آن توضیح دهد.در صورتی که اسم تخصیص داده شده به تست، مورد کاربرد آن را روشن بیان نماید، دیگر نیازی به خواندن پیاده سازی و محتوای کد نخواهد بود.یک قرارداد ممکن و پرطرفدار استفاده از کلمه ی &quot;should&quot; در اسم متد تست می باشد. برای مثال، می توان به &quot;ordersShouldBeCreated&quot; یا &quot;menuShouldGetActive&quot; اشاره کرد. با این نوع انتخاب اسم برای متد، مشخص می شود که متد مورد نظر دقیقا چه رفتاری را تست کرده و انتظار چه نتیجه ای را دارد. حاشیه نوشت ها(Annotations ) در JUnitفریم ورک  JUnit 4.x با استفاده از annotation های خود، متدهای تست را علامت گذاری کرده و امکان تنظیم اختصاصی آن ها را برای توسعه دهنده فراهم می آورد. جدول زیر لیستی از annotation های مهم در فریم ورک JUnit را به نمایش می گذارد. JUnit Annotations دستورات Assert دستورات assert معمولا با assert آغاز می شوند. متد assertion، خروجی واقعی تست را با مقدار مورد انتظار مقایسه می کند و چنانچه مقایسه با شکست مواجه شد، یک AssertionException صادر می کند.جدول زیر این توابع را به صورت اجمالی همراه با شرح عملکرد هریک به نمایش می گذارد. پارامترهای ذکر شده در []، اختیاری بوده و از جنس String هستند. دستورات Assert برای یاد گیری بیشتر توصیه میکنم به این لینک مراجعه کنید. </description>
                <category>Mostafa Hemmati</category>
                <author>Mostafa Hemmati</author>
                <pubDate>Sun, 31 Mar 2019 15:45:20 +0430</pubDate>
            </item>
                    <item>
                <title>مقدمه ای بر UI/Application Exerciser Monkey</title>
                <link>https://virgool.io/@mostafa.hemmati1362/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D8%A7%DB%8C-%D8%A8%D8%B1-uiapplication-exerciser-monkey-asq3bgruqq3t</link>
                <description> در سال‌های اخیر موبایل‌های هوشمند و تبلت‌ها بازار محصولات دیجیتال شخصی را فتح کرده‌اند. این محصولات نه ‌تنها بازار محصولات دیجیتال شخصی، بلکه بازار کامپیوترها و دیگر محصولات دیجیتال را هم تحت تاثیر خودشان قرار داده‌اند. به این ترتیب است که این محصولات هوشمند در سال‌های اخیر رشد قابل توجهی را تجربه کرده‌اند.  با رشد اپلیکیشن‌ها نیاز به تست آن‌ها به شدت احساس می‌شود . ابزارهای بسیاری می توانند برای Testing برنامه های اندروید استفاده شوند. برخی از آنها رسمی هستند مانند Junit , Monkey  و برخی ابزار گروه سوم هستند که می توانند برای تست برنامه های اندروید استفاده شوند.  در این مقاله قصد داریم ابزار Monkey را برای تست برنامه های اندروید توضیح دهیم.ابزار  Monkey    ابزار UI/Application Exerciser Monkey  که معمولا monkey نامیده می شود، یک ابزار command-line (خط فرمان)  می باشد  که می توانید آن را در هر نمونه شبیه ساز یا بر روی دستگاه اجرا کنید. monkey یک جریان شبه تصادفی از رویدادهای کاربر مانند فشار دادن کلیدها، لمس کردن ها و حرکات مربوط به یک دستگاه را ارسال می کند که به عنوان یک آزمون استرس بر روی نرم افزار کاربردی که در حال توسعه است عمل می کند. شما می توانید آن را با ابزار (Android Debug Bridge (adb اجرا کنید. ویژگی های Monkey   ابزار Monkey دارای ویژگی های زیادی می باشد، اما همه ی آنها می توانند در این چهار مولفه خلاصه شوند1) گزینه های پیکره بندی اصلی مانند رویدادهایی که قرار است اتفاق بیفتد2) محدودیت های عملیاتی مانند محدود کردن عملیات به یک package خاص3) نوع رویدادها و تکرار آنها4) گزینه های عیب یابی  وقتی monkey  اجرا می شود، رویدادها را تولید می کند و آنها را به سیستم می فرستد.  همچنین سیستم تحت آزمایش را تماشا می کند و به دنبال سه حالت است که به طور خاص رفتار می کند: اگر  monkey  را برای یک یا چند package  خاص اجرا کنید، او هر تلاشی را برای رفتن به هر به  package  دیگر مسدود می کند.   اگر برنامه  crash کند یا هرگونه استثناء(Exeption) کنترل نشده را دریافت نماید ,  monkey  متوقف می شود و خطا را گزارش می دهد.    اگر برنامه شما خطای  application not responding را تولید کند  monkey  متوقف می شود و خطا را گزارش می دهد . شما متناسب با سطحی که انتخاب کرده اید گزارش های مربوط به پیشرفت monkey  و رویدادهای ایجاد شده را خواهید دید .استفاده از Monkey  شما می توانید monkey  را با استفاده از یک خط فرمان در دستگاه توسعه خود و یا از یک اسکریپت راه اندازی کنید .از آنجا که monkey  در محیط شبیه ساز و یا دستگاه اجرا می شود، شما باید آن را از یک پوسته (shell) در آن محیط اجرا کنید. ساختار دستورات monkey  به شکل زیر استadb shell monkey [options] &lt;event-count&gt;برای شروع یک خط فرمان(command-line) باز کنید و وارد مسیر زیر شویدandroid-&gt;sdk-&gt;platform-tools  سپس شبیه ساز خود را اجرا نمایید و یا دستگاه مورد تست را به کامپیوتر متصل کنید و دستور زیر را اجرا نماییدadb shell monkey -p your.package.name -v 500  ابزار (adb (Android Debug Bridge - ابزاری است که برای اتصال و ارسال فرمان ها از دسک تاپ لب تاب یا کامپیوتر به دستگاه تلفن اندروید شما استفاده می شود. اینترفیس  shell - یک اینترفیس روی دستگاه می باشد که دستورات ما را به زبان دستورات سیستم ترجمه می کند. ابزار monkey - ابزاری برای تستینگ می باشد.  کلیدواژه v- مخفف  verbose  است و تعیین کننده عمق و level تست می باشد. 500 عدد تکرارها و یا تعداد رویدادهایی است که قرار است برای تستینگ ارسال شوند.  جدول زیر لیست تمام option هایی است که میتواند شما را در بهبود و دقت تست یاری دهدe.</description>
                <category>Mostafa Hemmati</category>
                <author>Mostafa Hemmati</author>
                <pubDate>Wed, 13 Mar 2019 18:14:06 +0330</pubDate>
            </item>
            </channel>
</rss>