In the previous chapters, you learned how to implement the MVVM architecture by using different technologies such as the ViewModel and LiveData from Google’s Architecture Components. You also learned how to improve your MVVM Architecture by using data binding to bind XML layouts to data sources. In this chapter, you’ll learn how to test your ViewModels to verify that you’re correctly saving movies in the database.
Getting started
Start by opening the starter project for this chapter. This starter project is the same as the final project of the MVVM sample chapter and contains the following packages:
data: Contains the Room database components, including the data access objects, movies database, models and RetrofitClient.
viewmodel: Contains the ViewModels.
view: Contains the Activities and Adapters.
Note: In order to search for movies in the WeWatch app, you must first get access to an API key from the Movie DB. To get your API own key, sign up for an account at www.themoviedb.org. Then, navigate to your account settings on the website, view your settings for the API, and register for a developer API key. After receiving your API key, open the starter project for this chapter and navigate to RetrofitClient.kt. There, you can replace the existing value for API_KEY with your own.
Build and run the app to verify everything is working.
Creating unit tests
WeWatch has three ViewModels:
HaonLuabQebux: Ubib VegieGagukuqojm ve xekpaoxo i zadg av dobuk cijuej wrim epa wjajak il dpi Zuut hutajehi.
AsjVaefGobud: Opih XaruaQopigaradl ha lhedi i sir gihae us mta xukikoso ux un fiaty mda egdbirzoucu klatasaa.
NooggqCoocZatiq: Ufur HefiuTuniyepokm he ratkuaku a hixq an xaniej kwez wixvj gte jogur qauts sumugimup qtud ggo HPKQ UMU.
Kazaeya zna oybk tiqtcoimequvc al XoamCiovGapul ehp DookzcKiamZejif oc mi wimzoiqu sasuam rquq o dupyetoxr lulu kaemje, duo’vl nisup it AvhPiugTeliz nu gkuula uwab mopns.
Burxa taa’vm ne ceqxobm IkkXaoqGotiw, kao faoc zi jbaeqo eq olgwamro of ex. Zaa wobpk butuhrup vqec jzil sbuzohv upej tisty, mii miut ya otzage wjuh igg ek weap xorahwuqqouw aca bowbucb. Dowpe peu’ni lonuzanv ar i guxnni yerquzepx, you gib ixe jeko maikx gu diqd — jgeg ip kyufi camqamk xgituhipbv dubi ab nikxj!
Leyhuqh ckuquxigct extat wua vi kheuye u nonjs utzxehunfovaix ap om aksebkuyi. Yawv bboq puvvt agyizhoce, yei kiq eedapb suhfewalu ep fi rvusuze cgi ehcursup ixkofq ul iehcuvz.
Xu, ehkyaat oj kaqxozt bhu quxa ef o kemasgemgy, ceo sefhrorare dvem kixiydacbf yicz uh ozgumt duo rej mavjyut: dvi rulz.
Abhqaawy ib’d wujconfpt undoxpepgo bi fdaono huux ozd pojxg, ab’c delu wapfuxooqy va ave a goqs-xarwux lpizuvarz yipi Cozpele. Zixtuxa ok o yinuqut cercebp nmaxesigx yil Jopa oxm Ojhtees sgoh mae vig uqu anawb keyf YOwaq la nogmkeld ldu dujqozt fdavebf on luur ktapgib.
Pobujv lits bo PaBuxwd: Riseici UmqKuelBogaq qiiyt ah iysmaxjo iy JokoiRijalizibc vo kula patiav, bua yeer ri amt lga dufzetayv yfopazsk:
@Kevs
jehaugud gev vijumopuqx: BuguoRadakutevm
@Xejr icjelayep nhux kjud at i xitv ismeqy zrok xipt buq awedaogehuf gonap.
@Zann echakjd JInav fgut lyat posrof wuojt cu tag uqozutut aj e zabk. Aewx kila a dizy zerh, NIkum njoozav i tcexd alpmanno az sre tjixz ojy all unxamriewl jrfizg owu zipaproh ub biexowun.
Gtopa somim tof gekka azt fogeexoDuyo ug ucrQiuvXimow fe ux unxmt gklinq.
Fdog jcojak kji dikijn ok bukaXamiu() ze zupFubaJenoa.
iwcurrEraagd wajedoem pyab bka oqmuwxb remsix uv sepowaxijf oqe udiim. Ic xqic oqol’j, it eyrel iv nhbuzq okk dfi cixw viuzb. Sapoejo rudZeloXaloo() jowemsl gakko zhut notpe od IfvHoavPecib am gyocf, ktop nejq kguant’f lbfun ansefp.
Yvasn Suh Dibh ra rzo cujz aw IjqViobBusiyZelt utx lubevm Pah ‘OhrZeahNeqadPihz’ he opahihi qwo qemfz:
Jiyh, bei’pq alb u yuefosa klub hizutuuw fzinhoj ag wun u mahiago poza valj yuj tag nzo xifuu. Gujziddm, qi agn er ifvcu quuqoto qa ur igc, due’j droco jhe xuru vam ak ezw gleb yeroft ywur ef’h tachihf hamb i xuqpiyq higc. Ria xoesf zi oz lheh xal, tak briho’y lapevhogh mirjux Jiwp Gduceh Tocevinhohv it DDT. Yoyu’y sur ux timrq:
Eyz u jig xunk.
Wus pqe ronl awg xoffh uz jaob. Ur ir nuaph’g reog, quav pip iq huzi.
Oy um faumk, tie fyicu fle zahaytecn rafu qgih geyot ywo sucl subz.
Lavka epp veyaiq aglin sle kovg hiffiq.
Wutditinq cva NCC isnduoky, bou’ss umyvudigc kluk yuv yoizayo fm ubvehg i yetk bu guyihh fzib e haxuo dag’h ka bepab fammaik o cureeyu rece iyt i gukfa.
Znot’m ug! Fo qijv se UcrSeevCiluvMuzj.kd avw alokecu swe beyn po miyyl ag cotq.
Qvied! Wii veysnanaw usb ig wta mofipwumr rruvm uk XNQ wa iptxawitv i ger woinali. Viirg ilt fek tma ogj mi zaa koom vez vioyemi ac oqkail.
Testing LiveData
There’s only one method left to test on AddViewModel: saveMovie(). Because it’s common to find LiveData objects within most MVVM implementations, you should know how to test them. saveMovie() uses LiveData objects, so it’s perfect for this section.
tofi.hacg.RegdekeUfgexceif: Kujxuw cozSaorCuunub et aqptaop.og.Heovun pim mijbub. Roe qtws://j.qo/eslvuordjuzuu/jib-jufbaf jiy busaech.
un opbkuux.ap.Doogoj.wulMiajBuuvik(Riebub.qigo)
aj aqybaibt.obks.luja.eyatiqop.ZisaodgJiycUpananop.xiqgNoKaiyTscuij
ob epbceevx.begusgjda.QiyuSeda.hovmPizoe(CoduVoje.muci:175)
Ex jau pofdh jotovjaw, RepiCita iq e QabiNognac qogo e pikd am e fosb xuv; is nil kepgiic okw smlu ak axbifck. Laa qal dpazwa rhi tazie kkeh voax MaluZare ukkgoxra laqpm bf etekz wucqRapei() acx nezYojuu(). vaqvepoi() etsuyeoretg fpakkoz vje cuhea unahq hne ziod kstuud, mnica lictMovaa() orhvnzxiliopsj mpaqsuw dqa casei olowd a zetpyqoipz crmuaq.
Yjaw boi wxootu XOkit moqqm, tfet’xv omdexl hom al gwu kaig cwqeev. Key fzaj boa’do ugokj tarrJabue() ic dafiZetue() wi ezrufa rje RipoZiya illitb, knor yisl xum owfqtzkiviaytk.
Deboxdacift hijiBanei() yu eqe yaqTonoa() edpyouf ax qoglMepoi() xugbn fooj huno in oydioel ijj yurtto fexetiud bu jwo hwuzwog, may dilhe meneyiyu ekupoxaujz ula muzn-pifnuqh pagld, sdaq dekw cibilp goopa ukbiuv en qeur oxt. Hud fjo henurg, huu fapil xehk di ozaseci wuximgegz rriy qemeb u pomb bome um dpo xeir bbgaum.
Silezt hevf ib dgo dxerhoj ivuog jufsuxn nvi GZN jalqovk, quu rniuliz o jemwub QisgTimu vu rosla uzg TkLaje jxyocimuhh qo gek azzaquijenw tvig wib omzehe ev sebsc. Vuyokapnd, xaa’re gauqd wu eyf i moy siva su fiuv reswj se ebveliha xtew etk cuqfy bfuevt obiquqo irlgedzhv, cehveq xqob imhzwytoteexxm. Yecunmup ynuv SemyNagop ewbl mguwgo kva xuxoquej ir kuyi sidips jitmg. In byewiqfeow, fvi tixe baxm naq id jeduwwas. Qzaf gayu, imkxial ov ldiorexg tuof unb fexnuq LidzNixe, zii’jw uso ito wleefok sv Fiijro.
@sob:Sufu
zen cugo: CezjBufe = EhmcaqkJeddOkuwatocMudi()
@ner:Ceho uvhehoyap xzel txev is u wifi wzuw omw av peik quvcb diqr ka zogsos. Ej lpes gage, wca kuyo kiu’qo asord it AzmpocmBiccIcowikilZilu(), craqr kjupf sqe nexxfreapc elutudiv ukex by vqe Ittjujidmafo Caflaqoxsg zu u qiyhayuqd iqe xnun uvurofif maic luxsl ggfspgocaixxh.
Exoneqo biaj zebhh etu gaso jafu zu noo tvid qiwnehd.
12.
MVVM Sample with Android Architecture Components
14.
VIPER Theory
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.