مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

آموزش تست unit و تست UI در iOS - بخش اول


نوشتن فرآیندهای تست کار بیهوده ای نیست، اما از آن جایی که تستها می توانند برنامه های پر زرق و برق شما را از تبدیل شدن به یک قطعه معیوب پر از ایراد باز دارند، لذا مطمئناً ضروری هستند. اگر شما آموزش تست واحد و تست UI در iOS را در دوره آموزش برنامه نویسی iOS بخوانید، قطعاً متوجه خواهید شد که تستها را برای کدها  و UI خود بنویسید، حتی اگر مطمئن نباشید که به چه نحوی در Xcode تست را انجام دهید.

شاید، شما قبلاً یک اپ کاربردی را نوشته باشید، اما هیچ تستی را برای آن تنظیم نکرده باشید و الان می خواهید که با انجام تست، هر تغییری را که مایل هستید، برای توسعه اپ خود ایجاد کنید. شاید برخی از شما، تست هایی نوشته باشید، اما مطمئن نیستید که آیا این تستها درست هستند یا نه؟ یا شاید در حال کار روی اپی هستید و تمایل دارید همین طور که دارید پیش می روید، آن را تست کنید.

تست Unit و UI در iOS چگونگی استفاده از ناوبر تست Xcode برای تست مدل اپ و متدهای غیرهمگام اپ ، چگونگی جعل کردن تعاملات  با کتابخانه یا اشیاء سیستم توسط stubها وmockها، نحوه تست UI و عملکرد آن، نحوه استفاده از ابزار  code coverageرا نشان می دهد. در طول این آموزش، شما برخی از واژگان مورد استفاده توسط تست ninjas را فراخواهید گرفت و در انتهای این دوره، شما با اطمینان، تستهای موردنظر خود را برای سیستم خود خواهید نوشت.

تست کردن

تست چیست؟

قبل از شروع به نوشتن هر نوع تستی، مهم است که ابتدا از اصول پایه ای شروع کنیم. برای انجام تست به چه چیزی نیاز دارید؟ اگر هدف شما توسعه یک اپ موجود هست، شما باید چه تستهایی را برای هر مؤلفه ای که طرح تغییر آن را دارید، بنویسید؟

به طور کلی، تستها باید موارد زیر را پوشش دهند:

  • عملیات اصلی: کلاس های مدل و متدها و تعاملات آنها با کنترلر.
  • بسیاری از جریان های کاری UI.
  • شروط سرحدی.
  • رفع عیوب.

First اولین تست: بهترین تمرین برای تست کردن

عبارت مخفف FIRST یک مجموعه مختصر از معیارهای تست unit مؤثر را بیان می کند. این معیارها عبارتند از:

سرعت: تستها باید به سرعت اجرا شوند.

مستقل/ جداگانه: تستها نباید عملیات تنظیم یا خاتمه دادن را بر روی یکدیگر انجام دهند.

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

اعتبارسنجی خود: تستها باید کاملاً خودکار باشند. خروجی باید هم “pass” و هم “fail” باشد، نه یک فایل log از تفسیرهای برنامه نویس.

به موقع: در حالت مطلوب، تستها باید قبل از این که شما کد را بنویسید، نوشته شوند، تا بتوانید آنها را تست کنید.

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

شروع انجام تستها

 starter projects که حاوی فایل های BullsEye و HalfTunes است را دانلود  کرده و از حالت زیپ خارج کنید، سپس آنها را باز کنید.

BullsEye یک اپ ساده در iOS Apprentice می باشد. منطق بازی را از یک کلاس BullsEyeGame استخراج کرده و یک سبک بازی جایگزین را اضافه کردیم.

در گوشه پایین از سمت راست یک کنترل تقسیم بندی شده وجود دارد که به شما اجازه می دهد سبک بازی را انتخاب کنید. Slide برای حرکت اسلایدر به میزان مقدار هدف، یا نوع، برای حدس زدن این که موقعیت اسلایدر کجاست، استفاده می شود. عمل کنترل همچنین سبک بازی را به عنوان پیش فرض کاربر ذخیره می کند.

HalfTunes یک اپ ساده است که کاربر در آن می تواند با iTunes API برای پیدا کردن آهنگ ها پرس و جو کند و سپس آهنگ را دانلود کرده و شروع به پخش قطعه آهنگ کند.

بیایید شروع به تست این دو اپ بکنیم!

Unit Test در Xcode

Xcode Test Navigator ساده ترین روش را برای کار با تستها فراهم می کند. شما از این ابزار برای تست اهداف و اجرای تستها در اپ خود استفاده خواهید کرد.

پروژه BullsEye را باز کرده و برای باز کردن ناوبر تست، روی Command-6 کلیک کنید.

روی کلید +  در گوشه پایین سمت چپ کلیک کنید، سپس گزینه New Unit Test Target … از منو را انتخاب کنید.

 

نام پیش فرض BullsEyeTests را قبول کنید. هنگامی که test bundle در ناوبر تست ظاهر می شود، برای باز کردن آن در ویرایشگر، روی آن کلیک کنید. اگر BullsEyeTests به طور خودکار نمایش داده نشود، برای عیب یابی یک ناوبر دیگر را باز کنید، سپس به ناوبر تست بازگردید.

این قالب، XCTest را وارد می کند و یک زیر کلاس BullsEye Tests از XCTestCase با setup()، tearDown() و متدهای تست نمونه تعریف می کند.

سه روش برای اجرای کلاس تست وجود دارد:

  1. Product\Test یا Command-U. این روش تمام کلاس های تست را اجرا می کند.
  2. روی کلید arrow در ناوبر تست کلیک کنید.
  3. آیکون الماس را در gutter را کلیک کنید.

هم چنین می توانید یک متد تست منفرد را با کلیک کردن روی آیکون الماس  آن یا در ناوبر تست یا در gutter اجرا  کنید.

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

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

شما نیازی به testPerformanceExample() ندارید، لذا آن را حذف کنید.

استفاده از XCTAssert برای تست مدلها

ابتدا، از XCTAssert برای تست عملکرد اصلی مدل BullsEye استفاده خواهید کرد. آیا شیء BullsEyeGame به درستی امتیاز یک دور را محاسبه می کند؟

در BUullsEyeTests.swift این خط را درست زیر عبارت import اضافه کنید:

@testable import BullsEye

این کار موجب می شود  تست unit به کلاسها و متدها در BullsEye دسترسی یابد.

در بالای کلاس BullsEyeTests، این خصیصه را اضافه کنید:

var gameUnderTest: BullsEyeGame!

بعد از فراخوانی super،  یک شیء  BullsEyeGame  جدید در setup() ایجاد کرده و آن را شروع کنید.

gameUnderTest = BullsEyeGame()
gameUnderTest.startNewGame()

این کار یک شیء SUT (System Under Test) در سطح کلاس ایجاد می کند، لذا همه تستها در کلاس تست می توانند به خصیصه شیء SUT و متدهای آن دسترسی یابند.

اینجا هم چنین یک متد startNewGame را فراخوانی کنید، تا یک targetValue ایجاد کند. بسیاری از تستهای شما از targetValue برای تست این که آیا بازی به درستی امتیاز را محاسبه می کند، استفاده خواهید کرد.

قبل از این که فراموش کنید و قبل از فرخوانی super، شیء SUT را در teardown()منتشر کنید.

gameUnderTest = nil

اکنون شما آماده هستید که اولین تست خود را بنویسید:

textExample() را با کد زیر جایگزین کنید:

// XCTAssert to test model
func testScoreIsComputed() {
  // 1. given
  let guess = gameUnderTest.targetValue + 5
  
  // 2. when
  _ = gameUnderTest.check(guess: guess)
  
  // 3. then
  XCTAssertEqual(gameUnderTest.scoreRound, 95, "Score computed from guess is wrong")
}

یک متد تست همیشه با نام text شروع می شود و با توصیفی از آن چه که تست می کند، ادامه می یابد.

بهتر است تست به سه بخش given، when و then تقسیم شود.

  1. در بخش given، مقادیر موردنیاز تنظیم می شوند. در این مثال، یک مقدار guess ایجاد کنید، می توانید تعیین کنید که مقدار آن چقدر از targetValue متفاوت باشد.
  2. در بخش when، کد مورد آزمایش قرار می گیرد: gameUnderTest.check(_:) فراخوانی می شود.
  3. در بخش then، نتیجه ای را که انتظار دارید، اثبات کنید ( در این مورد، gameUnderTest.scoreRound 100 - 5 است) با یک پیام که در صورت شکست تست نشان داده می شود، چاپ می کند.

تست را با کلیک بر روی آیکون الماس در gutter در ناوبر تست، اجرا کنید. اپ ساخته شده و اجرا خواهد شد، و آیکون الماس به checkmark سبز تغییر خواهد یافت.

دیباگ کردن یک تست

یک اشکال ساخت عمدی در BullsEyeGame وجود دارد؛ شما می توانید آن را پیدا کنید. برای دیدن اشکال در عمل، testScoreIsComputed را به testScoreIsComputedWhenGuessGTTarget تغییر نام دهید، سپس آن را برای ایجاد testScoreIsComputedWhenGuessLTTarget، کپی، paste و ویرایش کنید.

در این تست، مقدار 5 را از targetValue در بخش given کم کنید. بقیه موارد را به حال خود رها کنید:

func testScoreIsComputedWhenGuessLTTarget() {
  // 1. given
  let guess = gameUnderTest.targetValue - 5
  
  // 2. when
  _ = gameUnderTest.check(guess: guess)
  
  // 3. then
  XCTAssertEqual(gameUnderTest.scoreRound, 95, "Score computed from guess is wrong")
}

تفاوت بین guess و targetValue فقط 5 است، از این رو، امتیاز باید 95 باشد.

در ناوبر breakpoint، یک Test Failure Breakpoint ایجاد کنید. این کار عملیات اجرای تست را هنگامی که یک متد تست ادعا کند که شکست رخ داده، متوقف خواهد کرد.

تست خود را اجرا کنید: تست باید در خط XCTAssertEqual به خاطر یک شکست تست، متوقف شود.

gameUnderTest و guess را کنسول debug بررسی کنید.

guess مقدار targetValue – 5 هست، اما  scoreRound مقدارش 105 هست، نه 95!

برای بررسی بیشتر، فرآیند عیب یابی نرمال را استفاده کنید: یک نقطه توقف در عبارت when و هم چنین در BullsEyeGame.swift  در check(_:) در جایی که difference را ایجاد می کند، تنظیم کنید. سپس تست را دوباره اجرا کنید و خط به خط عبارت let difference برای پیدا کردن مقدار اختلاف موجود در اپ واررسی کنید.

 

فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 5 , تعداد قسمت ها: 221 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

در این فصل:-نمایش notification به کاربر زمانی که اتفاقاتی از قبیل لایک کردن پست و ... میافتد(این مبحث مبحثی مهم بوده و ج…

  توضیحات کلی دوره: با سلام خوش اومدین به حرفه ای ترین دوره ی Swift ابتدای کار ممکن است سوالی برای شما پیش آید: -من نیازی به ساخت اپلیکیشن اجتماعی ندارم چرا باید این دوره را ببینم؟ ج…
فصلِ: 7 , تعداد قسمت ها: 159 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

اپل نویس حرفه ای شوید... با این پکیج کسب درآمد میلیونی کنید....   در این پکیج به نکات ریز و درشت زیادی پرداختیم که خیلی خیلی میتونه به شما کمک کنه که تبدیل به برنامه نویس حرفه ای شوید... …
فصلِ: 12 , تعداد قسمت ها: 126 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

فصل 16 فصل آخرمون هست و میایم توی این فصل یه سری مباحث کوچیکی که جامونده و کارهای نهایی برای انتشار برنامه توی مایکت های…

با سلام نکته:هیچ نیازی به mac و یا iphone نیست... نکته:هیچ نیازی به بلد بودن برنامه نویسی از قبل نیست... مباحثی که توی این دوره مرور میکنیم میتونه ما رو از سطح صفر برنامه نویسی ios به صد …
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…
فصلِ: 5 , تعداد قسمت ها: 51 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش پرداخت درون برنامه ای بازار در یونیتی-اموزش خرید سکه در بازی-اموزش خرید مصرفی و غیر مصرفی…

توضیحات کلی مجموعه: آموزش مقدماتی تا پیشرفته یونیتی(ساخت بازی توپ چرخنده-اموزش بازی دوبعدی-اموزش بازی سه بعدی اول شخص شوتر-اموزش بازی سه بعدی رالی (ماشین سواری))   سرفصلهای دوره: نصب ی…
فصلِ: 2 , تعداد قسمت ها: 68 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت یک فروشگاه کوچک-آموزش کار با bottom navigation -آموزش کار با تب بار-آموزش کار با scrollview - آموزش کار با ان…

توضیحات کلی مجموعه: آموزش دوره فلاتر از پایه تا پیشرفته(این دوره به دوره متخصص فلاتر تغییر پیدا کرد) درسال های گذشته تعدا زیادی فریمورک معرفی شد که هرکدام تجربه خاص خودش رو داشت،اما فلاتر …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید