Dove eravamo con Windows Phone 7:- MS Test o nunit per il testing del codice- e per il mocking Moq 3.1 per silverlight
Per eseguire le nostre suite di test avevamo a disposizionesvariati test runnerQui facciovederequello di resharper
La strutturaclassicadella nostra soluzione era composta da:Applicazionecon View,VewiModel- Class library chereferenziavailprogettocontenente le test suite
Eccocinelnuovomondo:grossicambiamenti, dal punto di vista del testinggestioneda parte dei test runner delle keyword async/awaitnecessitàdi eseguireilcodicenell'emulatore o sul device
Per risolverequestiprobelmivienerilasciato con il toolkit un test framework che due peculiaritàcheallostadioattuale e la via principe per potereseguire test su windows phone.- necessita del toolkit
Con questostrumentocambianoperòanche le nostreabitudini di test:- la prima èche le nostre suite di test non sarannoospitate in una class library ma bensi in unavera a propriaappilcazione- purtroppoillanciodei test non saràpiùautomatico ma vedremoche ci sonodeibottoni- ma gestionaancheilcodiceasincrono
refenziavia nuget la dll- nellamainpagedell'applicazionedobbiamosettareil content con il content fornitodalladll in modo tale chesia poi lei a gestirel'interfaccia
Eccocome appareil test tools:Tags chepermetteevenutalmente di eseguiredelle suite di test specifiche e non di eseguiretuttii test di unaclasseun bottone play per lanciarei teste ilrisultatodei test dove ci sonoicontatoridei test e irisultati per suite
Applicazionedi demo:- applicazione con un db e un viewmodelchedeve fare visualizzare la listadeiprodotti.- usatoildbengine di sqlite per fare unaversionepiùaggiornata- pattern MVVM per questaapplicazione per potertestaretuttoilcodice.
Strutturadellesoluzione, come possiamovedere 2 vere e proprieapplicazioni per wp8 piùlinkatoil wrapper per usaresqlite- prima app vm e service e sqlite- utilizzo di caliburn.micro per vm framework- seconda app chereferenzia la prima con le relative fixture e referenziatoil toolkit test
Facciamoil primo test: - moccarevuol dire creare un oggettofittiziocheimplemental'interfaccia e tienecontodellechiamatechevengonoeffetuatedaimetodi- interfacciaidbservicechereperisceidati- viewmodel con metodo initialize chedeveeffettuare la chiamata la serivzio.- usiamomoq per moccarel'interfaccia.
Scriviamoilcodice per afrepassareil test:- nell'initializecarichiamo la listadeidati- ilviewmodelderiva da propertyChangedbase per eriditarel'impelemntazionie di caliburndellainotifypropertychanged.
Green
Secondo test:-vogliocheilvmmostriidatisulla vista e quindi mi aspettoche ci siaunalista products chedopoaverechiamatol'initializemostriidati.- mocco la chiamata al servizio e mi aspettoche mi ritorniunalista di prodotti con un prodotto- verificoanchechel'oggettoabbia le proprietàgiuste.
Implementonelvm e facciogirarei test
Green
Implementonelservizio la chiamata a sqlite e verificochepassiil test:- mi faccioritornaretuttii record dellatabella Product da sqlite
finoa qui codicesincrono, che in realtà in wp8 non girerebbeperchèl'i/o e ildbvannogestiti in modoasincronoscriviamo la primitiva del serviziocheabbiamovisto prima in modoasincrono e facciamo un test di integrazione.prepare inserisceidatineldbNel test verifico la presenzadeidatiusandoasync await
----- Meeting Notes (1/27/13 16:57) -----ed ecco il risultato
Io lo utilizzereisopratutto se uno ha giàscrittodelle suite di test per un'app wp7 e vuoletenerle per l'aggiornamento a wp8utile per fare dei test di integrazione e di regressione per vedere se spaccoqualcosamentresviluppo, ma non per fare unit test
Come profilareun'app? Tool in Visual Studio per profilare e monitorare.- monitoring : focus sulla user experience quindiresponsività e tempi di avvio- profiling: per veder le risorseusate come memoria e cpu.
Potetetrovarlo sotto il menu di debug o con Alt +F1e presenta le due possibilitàchedicevamo prima:monitoring o profiling
Applicazionedi esempiochecaricavolutamenteomoltegrosseimmagini in un controllo panorama.
Facciamopartirel'applicazioneediniziamo ad usarla. Quandoabbiamofinitoclicchiamosu End Session..
E ci apparequesto report e possiamovedereche la responsività come potevamofacilmenteimmaginare ci vienedettoche non è molto buona. Vengofornitealtreinformazioni come - la memoriausata- la bandautilizzata- e il tempo di partenza
- U sono le input gesture- prima banda frame rate dell'applicazione- utilizzodellacpu- reposonsivitàdell'app- utilizzodellabatteria- utilizzomemoria- notare la cpu a canna->frame rate basso, repsonsivitàbassa
Giusto due consigliche mi permetto di darvi, ma solo perchè ci sonocascato:- per iviewmodel: implementarel'idisposable e fare il dispose di tuttiglioggetticheavetenelvm e sganciarvi da tuttiglieventi a cui vi sietesottoscritti- per le visteusateil virtualizing stack panel per caricare solo glioggettiche vi servono, da valutarecaso per caso, perchè poi potresteavere un caricamento a scattidelleimmagini (spece se giàscaricate).