جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

اطلاعات شخصی شما برای پردازش سفارش شما استفاده می‌شود، و پشتیبانی از تجربه شما در این وبسایت، و برای اهداف دیگری که در سیاست حفظ حریم خصوصی توضیح داده شده است.

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > آموزش unit Test در اندروید

آموزش unit Test در اندروید

1401-05-15
ارسال شده توسط آموزنگار
برنامه نویسی
آموزش unit Test در اندروید

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

Unit تست  چیست؟

تست Unit یک روش تست است که در آن Unit (واحد های) جداگانه (یا کوچکترین واحد) کد برنامه را آزمایش می کنیم تا اطمینان حاصل شود که آنها به درستی کار می کنند.

تست Unit کمک می کند تا تأیید شود که هر واحد کد برنامه همانطور که انتظار می رود کار می کند.

اغلب تست های Unit حتی قبل از نوشتن کد نوشته می شوند. به عبارت دیگر، برای هر تابعی که قرار است ایجاد شود، یک تست واحد قبل از نوشتن تابع نوشته می شود. با پیروی از این روش، می‌توانیم bug ‌های احتمالی را در مراحل اولیه توسعه برطرف کنیم.

مزایای Unit تست

  • به یافتن زودهنگام bug کمک می کند.
  • هنگامی که به یافتن اشکالات در مراحل اولیه توسعه کمک می کند ، هزینه و زمان توسعه را کاهش می دهد.
  • بازسازی ساده تر می کند و مستندات را فراهم می کند.

تست Unit مخصوص هیچ پلتفرمی مانند اندروید یا وب نیست. مفهومی است که در توسعه نرم افزار استفاده می شود. اما در اینجا، تمرکز ما انجام تست‌های Unit در پروژه‌های اندرویدی است.

آموزش Unit تست در اندروید

هر زمان که یک پروژه اندرویدی ایجاد می کنید، این سه package را خواهید کرد.

Unit تست در اندروید
Unit تست در اندروید

همانطور که می دانید در داخل پکیج اصلی (اول) همه کدهای اپلیکیشن خود را قرار می دهیم. اما ما دو پکیج دیگر نیز داریم.

اکنون در مورد پکیج  AndroidTest بحث نمی کنیم. هدف امروز ما فقط پکیج test است. داخل این پکیج تمام کدهای Unit Test را می نویسیم.

چرا تعداد زنان برنامه‌نویس در ایران کمتر از مردان است؟
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

حالا به فایل build.gradle(app-level) بروید و قسمتdependencies  را ببینید..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
dependencies {
  
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
  
implementation 'androidx.core:core-ktx:1.3.2'
  
implementation 'androidx.appcompat:appcompat:1.2.0'
  
implementation 'com.google.android.material:material:1.3.0'
  
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
  
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  
  
testImplementation 'junit:junit:4.13.2'
  
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
  
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
  
}

در اینجا می بینید که testImplementation و androidTestImplementation داریم. testImplementation کتابخانه های موجود در پکیج test هستند. و به همین ترتیب اگر می‌خواهید کتابخانه در پکیج AndroidTest در دسترس باشد، باید از androidTestImplementation استفاده کنید.

اکنون، Java Unit Testing Framework JUnit به طور پیش فرض در اینجا اضافه شده است. هر زمان که پروژه ای ایجاد می کنید به طور پیش فرض اضافه می شود. ما از JUnit برای تست unit کد خود استفاده خواهیم کرد.

با JUnit از Google Truth برای ساده کردن اثبات ها (assertions) استفاده خواهیم کرد. از آنجایی که به طور پیش فرض در دسترس نیست. باید آن را داخل بلوک dependency فایل build.gradle(app-level) اضافه کنیم.

1
testImplementation "com.google.truth:truth:1.1.2"

کد برای تستUnit

در این مثال، یک تابع بسیار ساده داریم که آن را با روش unitTest ، تست می کنیم.

1
2
3
4
5
6
7
8
9
object Validator {
  
fun validateInput(amount: Int, desc: String): Boolean {
  
return !(amount <= 0 || desc.isEmpty())
  
}
  
}

یک کد بسیار ساده را مشاهده می کنیم. این تابع ، پارامترهای داده شده را validate (اعتبار سنجی) می کند. قوانین به صورت زیر است.

  • amount باید بزرگتر مساوی صفر باشد.
  • desc نباید خالی باشد.

اگر پارامترهای داده شده شرایط را برآورده کنند، مقدار true را برمی گردانیم، به این معنی که ورودی ها معتبر هستند. برای هر مورد دیگر، ما false را برمی گردانیم، به این معنی که ورودی های داده شده معتبر نیستند.

اکنون باید این تابع را آزمایش کنیم تا مطمئن شویم که این تابع همانطور که انتظار می رود کار می کند.

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

  • روی کلاسی که باید تست شود کلیک راست کنید.
  • به generate بروید و سپس Test را انتخاب کنید.
  • حالا JUnit4 را انتخاب کرده و ok را بزنید.

نوشتن Unit Test

در نهایت بر روی تابع validateInput خود تست Unit انجام می دهیم.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@RunWith(JUnit4::class)
class ValidatorTest{
   
    @Test
    fun whenInputIsValid(){
        val amount = 100
        val desc = "Some random desc"
        val result = Validator.validateInput(amount, desc)
        assertThat(result).isEqualTo(true)
    }
   
    @Test
    fun whenInputIsInvalid(){
        val amount = 0
        val desc = ""
        val result = Validator.validateInput(amount, desc)
        assertThat(result).isEqualTo(false)
    }
   
}

حالا اینجا کلاس داریم. که شامل تمام توابع برای آزمایش Validator است. هر کلاس Unit test باید با @RunWith(JUnit4::class) حاشیه نویسی شود (JUnit4::class چون ما از JUnit4 استفاده می کنیم، می توانید آن را با هر نسخه ای که می خواهید استفاده کنید تغییر دهید). در داخل این کلاس، توابع تست را برای آزمایش تمام سناریوها می نویسیم. از آنجایی که این فقط یک مثال است، ما فقط دو مورد آزمایشی داریم. یکی برای ورودی معتبر و دیگری برای ورودی نامعتبر است.

زبان برنامه نویسی بازی Red Dead Redemption 2 چیست؟
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

نکته دیگری که باید به آن توجه کنید این است که باید تمام function های آزمایشی خود را با @Test حاشیه نویسی کنید. اکنون در اینجا می توانید ببینید که ما دو function داریم.

whenInputIsValid(): این تابع برای تست حالتی است که ما ورودی معتبری را برای تابع خود ارائه می دهیم. بنابراین کاری که ما در اینجا انجام می دهیم این است که ما فقط تابع validateInput() را فراخوانی می کنیم و یک ورودی معتبر ارسال می کنیم. اکنون ما اثبات می کنیم که مقدار برگشتی درست است.

WhenInputIsInvalid(): در اینجا نیز همان کار بالا را انجام می دهیم. تنها تفاوت این است که این بار ورودی نامعتبر را ارسال می کنیم و اثبات می کنیم که نتیجه برابر با نادرست است.

برای اجرای تست می توانید از دکمه های play در Android Studio استفاده کنید. دکمه play را قبل از هر function و class خواهید دید.

نوشتن Unit Test

اگر تست را run کنید، آن را در حالت قبولی(pass) در تست خواهید دید. اگر تست ناموفق بود، باید تغییراتی در function خود ایجاد کنید.

بنابراین هر زمان که چیزی را در function تغییر دادید، باید دوباره آن را آزمایش کنید. و به این ترتیب، کد شما با تغییرات بعدی با شکست مواجه نمی شود زیرا همیشه باید ابتدا تست را پشت سر بگذارد.

امیدوارم از این مقاله لذت برده باشید . موفق باشید.

قبلی آموزش Dagger Hilt – راهنمای گام به گام
بعدی برنامه نویسی شی گرا

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=11383
  • Afghanistan (+93)
  • Albania (+355)
  • Algeria (+213)
  • American Samoa (+1)
  • Andorra (+376)
  • Angola (+244)
  • Anguilla (+1)
  • Antigua (+1)
  • Argentina (+54)
  • Armenia (+374)
  • Aruba (+297)
  • Australia (+61)
  • Austria (+43)
  • Azerbaijan (+994)
  • Bahrain (+973)
  • Bangladesh (+880)
  • Barbados (+1)
  • Belarus (+375)
  • Belgium (+32)
  • Belize (+501)
  • Benin (+229)
  • Bermuda (+1)
  • Bhutan (+975)
  • Bolivia (+591)
  • Bonaire, Sint Eustatius and Saba (+599)
  • Bosnia and Herzegovina (+387)
  • Botswana (+267)
  • Brazil (+55)
  • British Indian Ocean Territory (+246)
  • British Virgin Islands (+1)
  • Brunei (+673)
  • Bulgaria (+359)
  • Burkina Faso (+226)
  • Burundi (+257)
  • Cambodia (+855)
  • Cameroon (+237)
  • Canada (+1)
  • Cape Verde (+238)
  • Cayman Islands (+1)
  • Central African Republic (+236)
  • Chad (+235)
  • Chile (+56)
  • China (+86)
  • Colombia (+57)
  • Comoros (+269)
  • Cook Islands (+682)
  • Côte d'Ivoire (+225)
  • Costa Rica (+506)
  • Croatia (+385)
  • Cuba (+53)
  • Curaçao (+599)
  • Cyprus (+357)
  • Czech Republic (+420)
  • Democratic Republic of the Congo (+243)
  • Denmark (+45)
  • Djibouti (+253)
  • Dominica (+1)
  • Dominican Republic (+1)
  • Ecuador (+593)
  • Egypt (+20)
  • El Salvador (+503)
  • Equatorial Guinea (+240)
  • Eritrea (+291)
  • Estonia (+372)
  • Ethiopia (+251)
  • Falkland Islands (+500)
  • Faroe Islands (+298)
  • Federated States of Micronesia (+691)
  • Fiji (+679)
  • Finland (+358)
  • France (+33)
  • French Guiana (+594)
  • French Polynesia (+689)
  • Gabon (+241)
  • Georgia (+995)
  • Germany (+49)
  • Ghana (+233)
  • Gibraltar (+350)
  • Greece (+30)
  • Greenland (+299)
  • Grenada (+1)
  • Guadeloupe (+590)
  • Guam (+1)
  • Guatemala (+502)
  • Guernsey (+44)
  • Guinea (+224)
  • Guinea-Bissau (+245)
  • Guyana (+592)
  • Haiti (+509)
  • Honduras (+504)
  • Hong Kong (+852)
  • Hungary (+36)
  • Iceland (+354)
  • India (+91)
  • Indonesia (+62)
  • Iran (+98)
  • Iraq (+964)
  • Ireland (+353)
  • Isle Of Man (+44)
  • Israel (+972)
  • Italy (+39)
  • Jamaica (+1)
  • Japan (+81)
  • Jersey (+44)
  • Jordan (+962)
  • Kazakhstan (+7)
  • Kenya (+254)
  • Kiribati (+686)
  • Kuwait (+965)
  • Kyrgyzstan (+996)
  • Laos (+856)
  • Latvia (+371)
  • Lebanon (+961)
  • Lesotho (+266)
  • Liberia (+231)
  • Libya (+218)
  • Liechtenstein (+423)
  • Lithuania (+370)
  • Luxembourg (+352)
  • Macau (+853)
  • Macedonia (+389)
  • Madagascar (+261)
  • Malawi (+265)
  • Malaysia (+60)
  • Maldives (+960)
  • Mali (+223)
  • Malta (+356)
  • Marshall Islands (+692)
  • Martinique (+596)
  • Mauritania (+222)
  • Mauritius (+230)
  • Mayotte (+262)
  • Mexico (+52)
  • Moldova (+373)
  • Monaco (+377)
  • Mongolia (+976)
  • Montenegro (+382)
  • Montserrat (+1)
  • Morocco (+212)
  • Mozambique (+258)
  • Myanmar (+95)
  • Namibia (+264)
  • Nauru (+674)
  • Nepal (+977)
  • Netherlands (+31)
  • New Caledonia (+687)
  • New Zealand (+64)
  • Nicaragua (+505)
  • Niger (+227)
  • Nigeria (+234)
  • Niue (+683)
  • Norfolk Island (+672)
  • North Korea (+850)
  • Northern Mariana Islands (+1)
  • Norway (+47)
  • Oman (+968)
  • Pakistan (+92)
  • Palau (+680)
  • Palestine (+970)
  • Panama (+507)
  • Papua New Guinea (+675)
  • Paraguay (+595)
  • Peru (+51)
  • Philippines (+63)
  • Poland (+48)
  • Portugal (+351)
  • Puerto Rico (+1)
  • Qatar (+974)
  • Republic of the Congo (+242)
  • Romania (+40)
  • Reunion (+262)
  • Russia (+7)
  • Rwanda (+250)
  • Saint Helena (+290)
  • Saint Kitts and Nevis (+1)
  • Saint Pierre and Miquelon (+508)
  • Saint Vincent and the Grenadines (+1)
  • Samoa (+685)
  • San Marino (+378)
  • Sao Tome and Principe (+239)
  • Saudi Arabia (+966)
  • Senegal (+221)
  • Serbia (+381)
  • Seychelles (+248)
  • Sierra Leone (+232)
  • Singapore (+65)
  • Sint Maarten (+1)
  • Slovakia (+421)
  • Slovenia (+386)
  • Solomon Islands (+677)
  • Somalia (+252)
  • South Africa (+27)
  • South Korea (+82)
  • South Sudan (+211)
  • Spain (+34)
  • Sri Lanka (+94)
  • St. Lucia (+1)
  • Sudan (+249)
  • Suriname (+597)
  • Swaziland (+268)
  • Sweden (+46)
  • Switzerland (+41)
  • Syria (+963)
  • Taiwan (+886)
  • Tajikistan (+992)
  • Tanzania (+255)
  • Thailand (+66)
  • The Bahamas (+1)
  • The Gambia (+220)
  • Timor-Leste (+670)
  • Togo (+228)
  • Tokelau (+690)
  • Tonga (+676)
  • Trinidad and Tobago (+1)
  • Tunisia (+216)
  • Turkey (+90)
  • Turkmenistan (+993)
  • Turks and Caicos Islands (+1)
  • Tuvalu (+688)
  • U.S. Virgin Islands (+1)
  • Uganda (+256)
  • Ukraine (+380)
  • United Arab Emirates (+971)
  • United Kingdom (+44)
  • United States (+1)
  • Uruguay (+598)
  • Uzbekistan (+998)
  • Vanuatu (+678)
  • Venezuela (+58)
  • Vietnam (+84)
  • Wallis and Futuna (+681)
  • Western Sahara (+212)
  • Yemen (+967)
  • Zambia (+260)
  • Zimbabwe (+263)
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط