Your SlideShare is downloading. ×
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Test and profile your Windows Phone 8 App
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Test and profile your Windows Phone 8 App

479

Published on

In this presentation i will give you a deep overview about Windows Phone 8 testing tool and how to profile and monitor your application performance.

In this presentation i will give you a deep overview about Windows Phone 8 testing tool and how to profile and monitor your application performance.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
479
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • 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).
  • Cosaabbiamovistooggi
  • Transcript

    • 1. ___________________________________________________ Michele Capra Software Engineer @ OrangeCode
    • 2. WP7 AppView and ViewModelWP7 Class LibraryTestSuite
    • 3. public partial class MainPage : PhoneApplicationPage{ public MainPage() { InitializeComponent(); Content = UnitTestSystem.CreateTestPage(); }}
    • 4. [TestClass]public class MainViewModelFixture{ private MainViewModel _viewModel; private Mock<IDbService> _service; public MainViewModelFixture() { _service= new Mock<IDbService>(); _viewModel= new MainViewModel(_service.Object); } [TestMethod] public void Initialize_Should_LoadDataFromDb() { _viewModel.Initialize(); _service.Verify(p=>p.LoadProducts()); }}
    • 5. using Caliburn.Micro;using OrangeCode.Wpreborn.SQLIteApp.Services;namespace OrangeCode.Wpreborn.SQLIteApp.ViewModels{ public class MainViewModel :PropertyChangedBase { private readonly IDbService _service; public MainViewModel(IDbService service) { _service = service; } public void Initialize() { _service.LoadProducts(); } }}
    • 6. [TestMethod] public void Initialize_Should_ShowData() { _service.Setup(p => p.LoadProducts()).Returns( new List<Product>{ new Product {Name = "Product 1", Serial ="123456"} } ); _viewModel.Initialize(); Assert.AreEqual(_viewModel.Products.Count,1); Assert.AreEqual(_viewModel.Products[0].Serial,"123456"); }
    • 7. public class MainViewModel :PropertyChangedBase{ private readonly IDbService _service; public IList<Product> Products { get; set; } public MainViewModel(IDbService service) { _service = service; } public void Initialize() { Products=_service.LoadProducts(); }}
    • 8. public interface IDbServiceAsync{ Task<IList<Product>> LoadProductsAsync();}public class DbServiceAsync :IDbServiceAsync{ private readonly SQLiteAsyncConnection _context; public DbService(SQLiteAsyncConnection context) { _context = context; } public async Task<IList<Product>> LoadProductsAsync() { return await _context.Table<Product>().ToListAsync(); }}
    • 9. private async void PrepareDb(){ SQLiteAsyncConnection connection = new SQLiteAsyncConnection("TestDb.sqlite”); await connection.DropTableAsync<Product>(); await connection.CreateTableAsync<Product>(); await connection.InsertAsync(new Product { Name = "Product 1", Serial = "123456" });}[TestMethod]public async void LoadProductsAsync_Should_Load_Data_FromDb(){ await PrepareDb(); var data= await _service.LoadProductsAsync(); Assert.AreEqual(data.Count,1);}
    • 10. Email : michele@orangecode.it Blog: www.orangecode.it/blogTwitter: @piccoloaiutante GitHub: github.com/piccoloaiutante

    ×