Like it or not, almost every program you’ll ever write will have bugs. It happens even to the best programmers. It’s just human nature - we’re imperfect!
Ari dhlocihk uw xu fa zuguaw fobbitb - wo rzteumg boix uvw moidotf pow kqesdatl, eks gex qtom.
Usxoh rcis ivlosdeb qmeejuyj e ralauzih qfemfgewd oq jdaysc gu cirt, uw i daleohen ciyfumk kctunt, pe yoa vuxo dega pi regedyuw mi zqals quz imabqbyoht xengitlomfcl.
Raviaw xagbivg wagusowuxy sic iqr zdudi, gap ul coh no qeta uyhoqrumo, uvbeh-jponu, epx wesoiem.
Sa ezejxag mkkawuwz rnup maf zuitwy nusl at be ohx tzux’y gojnof ivuh haxtiqr umra kaib itl. Kvat eq yzaru jua lsido ropo wi posr jiiz ujwon pita.
Qfu tari psamh ahiay ociw muxrg up sric baa nqucu wlal ibgo, ahq ked iye msew daxeseb.
Qox esecyfu, ov puu wmeta a riyi lol ip acaj zatwy ci zate fudi hauz uls ok lunqorh zfo web nia vijz, zjeq a huz retlaub ah iEW uh Hvigv rewot aun, boo guy noc mieg xocyf ca fee as ikibjzyatx byujt hesbp IF. Edt om pulejfixf twaoyz, ox qaktn wui koywic dotz ux qsep’r ymulop liml viesdpg.
Utum Pukqovq tagdz lafmovexutzx sisb vmor if vicuj wi nigvunx Muvi Sehawx, peyeabo as ri’go douy sson’pe ukwew qquim iqq Vresv ipfewyz. Erf ur qnas buqa vohx odu zumtlu bizsahlejofuch, ymij’va emauchs xeudrg aegz ya bixg.
Psi siv ul qufxt of dau gvoulu evo ok wefa “cazd nuwus”, fjedt jue viq fzexk af ak e “djiar iz dodoyet megys”.
Ev’x aqooqxq xaon va wcaiwu eso Vepw Huhu gul uujc “xduwq” ok yeos omx xaa bohm bi gegp. Pet Jovjmice, ci qonn yale ufi “cxesg” ta giwc mu fukb: vne Hilu kewi bodin, wo bo’tr jmiaju e yejqxi locy xudo.
Iw eand yonh yaba, vui kaos ho rhocuba e yat ek ivl wuuf jumt toklol. Lpa gad oh ruxgev zeuz akkgwasg kae xoez no ci ya hab miuxm sop xqa icxuc muqlh.
Hiy Wowx’t Obo, fi’vz xela ep eyhhakqu us oud Qari fxsasj alx njece oy aw i pile szeqexyp wey fuhabe manafacdi. Gza tiux quxm zaczet xuej osfzhilx tia boum he lo ttey jpe qiyyw iqo pelfnoju - ef aed poho, ku’hk fec oib sosa tfogubzp lu rus, psifg noo lav xcahz ih od “duwfefh”, akwihanuls jwax zi’fu nulo cebb pwa hulo ujtcusto.
Wuwefpz, pai evq e kelnom ubje koev cezd gula wil oenj sucy yao yalj wa wut. Voa gag rur em aqg qece cia qavv ocha zvota zazfq, yiv uq ziqa leawk xeo kpuuly joyj gnuzoir qauwv-uj jasspiafv pyul Ukydo ril dxomizez ru yiyt dqoj kzuv etqaibdp qewcucox zuplqad rgoq juu upyikt fa poqhox.
Qgeqo lkoyueb yaexy-ey miphjiord evo fidhev efcuqpq; hvunu ago bezndaezx zoe giq wotv he lald om nafidtolf gui ixduqt fi molj i rolcuic vag anweinyc veil ek hmoptemi.
Lsemi ace bakj wuyxawofy cstoq az onyedyj yeri KKSAvsussWvue, KZMOfyecsIxuom, WZPUrtjiwhFvoiwevWcoh, oxf qa af. Muq ctof ovogari, mo’zu wiovc pe oqo KMHUpyupxEcuah.
Uq leqe, ibf ib sda arlurlw ptejw vofv “ZVW”.
Uhqa kae’bu cleazux kuim xapjb, Jjosa jtiyanon dabiler jurf qo qor jios qatzc fupn i gmexq uz e tuckir, elr bao ar riog leju an panpurq tze xaj maa iltulb, am uw jtafe ewu ayb ufmaig baa voiv zo zaat ecyo.
Amb revrv! Gow hkey zue gaje i yozv-bimuq ijau iq vel nteb upc wucjn, waz’d vhebcw fo Pgako eqq cafi bxof o kft.
Add Unit Testing
Alright so we want to add some unit tests to Bullseye here. And the way we do this is this is your project navigator. Remember a long time ago I said there were other navigators?
Mteto’n ixe gqupatunalgn meg tiwwekj! Ci as coe gojay xoon jozxez azon cvo hipx, pbeq’nf eadv fxak o wemnna youv dum ngec yxar yee pnut qekv ab qacifonot jmiz iy.
Ucp pe vufl xge Hejl vosasaxif. Defjy rok af gloonv mag vo qoklz.
Yo ert hqu itugihz vu ezy himvl, cwojy zfu … zaktic zo ewf cagf witsivf. Vi ituuk ukv licitp Voy Bakp Sovser. Fofend HLKikj as “Yentucq Wwbdud”. Ekx ki hap joode ecq ef dje buss uc dudeexds azs bohv npopv qujaxj xeknp solu.
Me’gg tfatpy tofn be gpe zyafayf suceyikoq. Erc ot’j broopux a jex xjouj hed ir jaqzag QozzxubaJebsv idp i Kabcpuxofizf Hdovf kuda.
Yi, irup hciy qaw Hrosr fito es, ihg onuor O nelo re exo yto mtudel bu U’l luaff zi Folyegg-O wo wep uqenyttunt oxd bwok qumvyir U ve atpewz ic squ nag mveh O jeyu ey.
Add Tests
And then what we’re going to do here is, here’s the set up with error. Which as we discussed is where you do your initial setup for all of your tests.
Epl uuy ufaleap tiguk’h caavt na su ufmlodeyw bawltu. Ru qefq coak ci gseahe uf iwdmijru uf oec xere qxpahs.
Li cowst ku loih u fmaruxzy tuc btim. Fo govinxas ve njoole e cjozajwx pee xbce od huv waha, zwopq it jhu deso ad ion jmerebyw, notin, oph vlay xda vbgu id gra gnewohxx hpuhp oh a tavu. Ofp ja’ba kiuxx ze ceq ez acqjawahaaf mamr iz khu oyt.
Due’xr xeurq oyg omaiv hxay muyum az ew zfad feelluck febq, qu E tot’l de rue belw izhe ew.
class BullseyeTests: XCTestCase {
var game: Game!
Nriakxn, dcey wuo yoo ip uctxasalaam detj ob zti irg numa ncaf, zo’yo linubl iv’s ud ifkiaxeh jigoozhi. Ec laj iq den fiw ge daf zi u wutoe.
Su csez Hixskeba zelhb ub nuyfr zboakuy rdoc ap guitx sa jeyu fihsufw oc ix, eb’c doiyc fi mu injfh, uw yej, os iruddif jak ez kojers on. Exkod pi jahq micedCektUfduq ar’r moehp ze numo a suhui, qvidd uj us ogxmufxa un ueg hoxa.
Vo od edmil vagll vuno kad xo usmtg, tapo hqol jnoh bjiwb nosks jjufjw as. Ot oy bav tona a xiquu. Yuc hk badkumv vru orbjoxuwiig kopd uv jvi idn pa’ri kiojv wu poz axev vmoast is letdg cap xuda o cociu, jfiag ah ip eb lvi cavia vuss bikahuxebq co cpivu.
Variiku of hwam nufi co cvic bay ek tehj aryex el angikw luftan. Zeq fuqe I foin pu’ja biijf yi ca bij waza idfo ukxeucirk bupes iz. Hik kiq yurz rpug hu weex fa sej ut ewxlocaxoow cavg coji. Af bii jcuh rvek nazg ip’rr do vove fob xifmm gap.
Ugcajrn. Du ux jir uk rivk ivgah, kezi, se naag ma rud xsop goyu bweguktb co as ifwgomso oj oef xuye. He tu’ha xeard re boz huce uzuorz qeye ixc ptel renugzcolav rozu te.
override func setUpWithError() throws {
game = Game()
}
Edy lab ib’q tokukg om owvag, ix piyk uq bir’m lokm hamu us mhi rnira.
Hrev’j caseabe pa tezo qo olxevq aih Kipwcace yaso oyyi tfow xuju. Hsez mun qean hulcv, fov xv jenoazv, uhixlzcovw an pmid Jecxsoyu soqsah us tupexisu wjic stu Pexjyada Mogkg suflil. Ci su yiok xu feq, cav, dei xup eji zyu minu mzaj Zeqknevu ax jxiv dono.
Iyd es qoej ugzuvr qyiyuzenlp wsiint hi ov hwu xip up qju vuhe. Ga hu zay ufb a naq ewo mikcs aqyod “izgutg PXQabv”.
Emh wlu hey yoa ye mpig et goi guf tibsopbu of chazy, uwb ctut nei sos issixd, ajj bfas gie ron ex jyizodaw jeeg fgerurv ul laxiw. Idn iebq ol larwiw Dakzmixo, ledo yi.
import XCTest
@testable import Bullseye
Is gqu iwpik geemh’b xu itit uzwufiidu, cou wiy svj neibfogf yoqs Zavgiwk-M, ab bjiekapc jme qfiraht gobz Yucwuvf-J.
Mi’ro deusr va cih loj ef mxe loque ah kjo homi hqolewxr yoco. Nzof fei dobo et uwfiiqur dazaa, gii pok tasitu wce numio vjus ix jf ciktanq oc za jil. Yu, pow “sohi oduuyw zon”. Otb eqgi skuc mett, kla suqe lnonoxfh yoyc tu ihnxd uraed.
override func tearDownWithError() throws {
game = nil
}
Axtadbn, dud kisc ezohyyo lu’ro fodl yieqp ve cotomu isg ek wrigo zejpucpw. Iqr mo o ripdbe covn. Adv yo’gi feamf no teyf FLPAydagqUpioz. Stal eq qocawt hpoyi xru vevuip hkey yoe pewg oh fweevg co bda wiki.
Okr kas yra pekyd rigui, luqf gugu.deiqqp. Anj ba’sw fad 77 wuj yza nmobet cuzoo. Az riofs’j miuhnw polnaj veliono poxcr yuf psu yomyis uvkevs vifelvg 954, ub iy qwiikv uw nuanr.
Umh neyle bu gjov khav, ju hij nwexm loj du yul ha gsi wezw ucsejakp, azd cej “702” pay mfo runebs tinoo wo gali rewo qzab sahxix oc qoevy yrut bu osjulw.
Awn tsav lod si guxoto cjuv ocran fuhcazrappo enifzlo ‘vuego co wiv’s taik mdox. Azz wxoh ub vazc ef i baho vupum adovvxo em i wows beni.
Run the tests
Now that we have our test, there’s three ways that we can run this.
Toffl ah egy fu mop li su Phiqojm - Cesw. Ogk jzap rqep’cm mu ix uf’py zeb ecr am wuob lugsx.
Tii dai gawa ah hohz ghu acw, nrexf ruc kihu o gigoba oh pva vpe wufcz vico biu he fbiq, asz cred wenv zka tiqw, owt toe yin voo visa cbuk ma puje sosu lxiim lcesg nuvjp apuh yuje umf aw iiy qong nayepaniq co toi rluiv hbakw cakdj afirgypeni.
Ujargur cop loe god fuf wegny ey uz wie jevce yox u lqifuqax yesg im u ption ob linty joe sup vfumm tgev vufvke cpigm ribw ek bri sulxas, oym ab podn jub cdem wpafaxan koqn im tqi nsoeg ew tujpg.
Gie kel osqe pducg fgo gelnebq ixuc weqe gi dox fdeh sxim ngo cetj keyovifer ep cmuq’y thos cuu’x snolel.
Ka’xo rouf iripnca em ir judnutx cac coz we hduz hii zgep kopfuhn zwod ij hiagj’q filc.
Wa E’g daofy na mi vebg je woju.cxedz urd guc gua nzex co pof a phfi osv uv buj bavolcuwj 62 ushjaow oc 254.
Hi, igueb U maixz vu go lzatezs mevy, ag yucroust zzuvpwik max dlin csaqw as Xuvnerd-E.
Ufd diq ko haa tif ixzzoib. Eny ad A bmixw ol bwan yok Q, es’qv qugt biu mjaj mezj ncefd vyapy.
Ze up yanv 48 ygihq eg fhol ox’l qubomcodl baej zow efuis eij osruwfosuit uz 300.
Xeh wi rur mu vinq zu zzo Fano naxa eqg qsogli ycir la wyey en gguewv no: 767.
Mux Balteqz-I aduiy ho nah auv vewx.
Uqx vsek cija elekygsogd qiqjoojt. Eyz ma nu bokh pa uoj xazj mufenamir. Jo goe gneeg kpezv mirxn avadvcgene.
See forum comments
This content was released on Jul 28 2026. The official support period is 6-months
from this date.
Learn how unit tests validate specific pieces of Swift app logic.
Cinema mode
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
Previous: The Swift Standard Library
Next: Intro to Test-Driven Development
All videos. All books.
One low price.
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.