{"id":6528,"date":"2017-02-09T13:55:21","date_gmt":"2017-02-09T12:55:21","guid":{"rendered":"http:\/\/www.iprog.it\/blog\/?p=6528"},"modified":"2017-02-09T13:55:21","modified_gmt":"2017-02-09T12:55:21","slug":"testare-le-nostre-applicazioni","status":"publish","type":"post","link":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/","title":{"rendered":"Testare le nostre applicazioni"},"content":{"rendered":"<p><a href=\"http:\/\/www.iprog.it\/blog\/?attachment_id=6529\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6529\" src=\"http:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg\" alt=\"\" width=\"400\" height=\"300\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg 400w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test-300x225.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p class=\"p1\"><span class=\"s1\">Ciao a tutti cari amici di iProg, oggi tratteremo un\u2019 argomento molto importante ovvero il testing,<span class=\"Apple-converted-space\">\u00a0 <\/span>testare tutte le funzionalit\u00e0<span class=\"Apple-converted-space\">\u00a0 <\/span>della nostra applicazione e\u2019<span class=\"Apple-converted-space\">\u00a0 <\/span>molto importate poich\u00e9<span class=\"Apple-converted-space\">\u00a0 <\/span>in questo modo riduciamo il numero di possibili<span class=\"Apple-converted-space\">\u00a0 <\/span>bug<span class=\"Apple-converted-space\">\u00a0 <\/span>all\u2019interno di quest\u2019ultima.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">Prima di scrivere la logica applicativa della nostra applicazione e\u2019 molto importante scrivere il test code, in questo modo ci concentreremo sul problema e saremo costretti a pensare come risolvere un tale problema,<span class=\"Apple-converted-space\">\u00a0 <\/span>in questo modo saremo in grado di scrivere un codice migliore.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">E\u2019<span class=\"Apple-converted-space\">\u00a0 <\/span>possibile suddividere il processo di testing in 3 fasi: <\/span><\/p>\n<ol class=\"ol1\">\n<li class=\"li1\"><span class=\"s1\">Creare un \u201cfail test\u201d da qui possiamo scrivere un codice che superi tale test<\/span><\/li>\n<li class=\"li1\"><span class=\"s1\">Scrivere un codice che superi tale test<\/span><\/li>\n<li class=\"li1\"><span class=\"s1\">Ottimizzare il nostro codice\u00a0rimuovendo codice ridondante dai nostri test<\/span><\/li>\n<\/ol>\n<p class=\"p1\"><span class=\"s1\">Dopo questa piccola introduzione passiamo alla pratica, l&#8217;applicazione che testeremo sara&#8217; una semplice app con una tableView. Quindi creiamo un nuovo progetto di tipo <b>singleViewApplication\u00a0<\/b>e assicuriamoci di spuntare il flag include Unit Tests<\/span><\/p>\n<p class=\"p1\"><a href=\"http:\/\/www.iprog.it\/blog\/?attachment_id=6530\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-6530 aligncenter\" src=\"http:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-10.51.22-620x440.png\" alt=\"\" width=\"620\" height=\"440\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-10.51.22-620x440.png 620w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-10.51.22-300x213.png 300w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-10.51.22-768x544.png 768w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-10.51.22-940x666.png 940w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-10.51.22.png 1450w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p class=\"p1\">A questo punto possiamo notare che e&#8217; stata creata una cartella nomeProgettoTests nella quale possiamo trovare un file swift<\/p>\n<p class=\"p1\"><a href=\"http:\/\/www.iprog.it\/blog\/?attachment_id=6531\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-6531 aligncenter\" src=\"http:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/iProgUnitTestTests_swift.png\" alt=\"\" width=\"500\" height=\"468\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/iProgUnitTestTests_swift.png 500w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/iProgUnitTestTests_swift-300x281.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/>\u00a0<\/a><\/p>\n<p class=\"p1\">Analizziamo insieme questo file:<\/p>\n<p class=\"p1\"><a href=\"http:\/\/www.iprog.it\/blog\/?attachment_id=6532\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-6532 aligncenter\" src=\"http:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.23.25-620x352.png\" alt=\"\" width=\"620\" height=\"352\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.23.25-620x352.png 620w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.23.25-300x170.png 300w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.23.25-768x436.png 768w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.23.25-940x534.png 940w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.23.25.png 1384w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/>\u00a0<\/a><\/p>\n<p class=\"p1\">Ora riprendendo in considerazione i 3 punti fondamentali per effettuare un test, per prima cosa creiamo un test che fallisce, \u00a0la prima cosa che testeremo e&#8217; se il datasource e i delegate per la tableView sono stati settati correttamente.<\/p>\n<p>[code lang=&#8221;swift&#8221;]<br \/>\n\/\/ E&#8217; buona norma che il metodo di ogni test inizi con la parola test (scusate il gioco di parole)<br \/>\nfunc testTableViewDataSourceAndDelegate (){<br \/>\n XCTAssertNotNil(vc.tableView.delegate)<br \/>\n XCTAssertNotNil(vc.tableView.dataSource)<br \/>\n }<br \/>\n[\/code]<\/p>\n<p class=\"p1\">Ora digitiamo cmd+u per eseguire il nostro test, come possiamo notare il nostro test fallira&#8217;, niente paura era proprio quello il nostro scopo, a questo punto scriviamo del codice che ci consentira&#8217; di &#8220;superare il test&#8221;, quindi per prima cosa spostiamoci all&#8217;interno del file storyboard ed aggiungiamo una tableView e una cella\u00a0alla nostra\u00a0collectionView.<\/p>\n<p class=\"p1\"><a href=\"http:\/\/www.iprog.it\/blog\/?attachment_id=6535\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-6535 aligncenter\" src=\"http:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.39.07-620x1056.png\" alt=\"\" width=\"294\" height=\"501\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.39.07-620x1056.png 620w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.39.07-300x511.png 300w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.39.07-768x1308.png 768w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/Schermata-2017-02-09-alle-13.39.07.png 842w\" sizes=\"auto, (max-width: 294px) 100vw, 294px\" \/><\/a>A questo punto diamo un id sia allo storyboard che alla nostra cella, dopodiche&#8217; non ci resta che collegare il tutto al nostro file ViewController. Terminati gli step precedenti scriviamo del codice che superi il test creato in precedenza:<\/p>\n<p>[code lang=&#8221;swift&#8221;]<br \/>\noverride func viewDidLoad() {<br \/>\n super.viewDidLoad()<br \/>\n tableView.delegate = self<br \/>\n tableView.dataSource = self<br \/>\n }[\/code]<\/p>\n<p>Ora Torniamo nel nostro testFile e aggiungiamo le seguenti linee di codice:<\/p>\n<p>[code lang=&#8221;swift&#8221;]var vc : ViewController!<br \/>\n override func setUp() {<br \/>\n super.setUp()<br \/>\n let storyboard = UIStoryboard.init(name: &quot;Main&quot;, bundle: nil)<br \/>\n vc = storyboard.instantiateViewController(withIdentifier: &quot;storyboard&quot;) as! ViewController<br \/>\n _ = vc.view<\/p>\n<p> }[\/code]<\/p>\n<p class=\"p1\">Non abbiamo fatto altro che inizializzare il nostro oggetto ViewController. Se ora proviamo ad eseguire nuovamente il nostro test possiamo notare che il tutto andra&#8217; a buon fine. Ora creiamo un&#8217;altra funzione &#8220;test&#8221;<\/p>\n<p class=\"p1\">\n<p>[code lang=&#8221;swift&#8221;]func testNumberOfRow(){<br \/>\n XCTAssertEqual(vc.tableView.numberOfRows(inSection: 0), vc.nomi.count)<br \/>\n }[\/code]<\/p>\n<p class=\"p1\">Ovviamente anche quest&#8217;ultima fallira&#8217; e di conseguenza andremo a creare del codice funzionante:<\/p>\n<p class=\"p1\">\n<p>[code lang=&#8221;swift&#8221;]extension ViewController: UITableViewDataSource,UITableViewDelegate{<\/p>\n<p> func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&amp;amp;gt; Int {<br \/>\n return nomi.count<br \/>\n }<\/p>\n<p> func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&amp;amp;gt; UITableViewCell {<br \/>\n let cell = UITableViewCell()<br \/>\n return cell<br \/>\n }<br \/>\n}[\/code]<\/p>\n<p class=\"p1\">Se questo tutorial ti e\u2019 piaciuto faccelo sapere mettendo un like sulla nostra pagina di facebook<\/p>\n<p class=\"p1\"><a href=\"http:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/iProgUnitTest.zip\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5317 aligncenter\" src=\"http:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2013\/09\/download_esempio-300x120.png\" alt=\"\" width=\"300\" height=\"120\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ciao a tutti cari amici di iProg, oggi tratteremo un\u2019 argomento molto importante ovvero il testing,\u00a0 testare tutte le funzionalit\u00e0\u00a0 della nostra applicazione e\u2019\u00a0 molto importate poich\u00e9\u00a0 in questo modo riduciamo il numero di possibili\u00a0 bug\u00a0 all\u2019interno di quest\u2019ultima. Prima di scrivere la logica applicativa della nostra applicazione e\u2019 molto&#8230; <a href=\"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":6529,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,12,15,2234,1],"tags":[],"class_list":["post-6528","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-objective-c-ios","category-objective-c-mac","category-objective-c-teoria","category-swift","category-varie"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Testare le nostre applicazioni - iProg<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Testare le nostre applicazioni - iProg\" \/>\n<meta name=\"twitter:description\" content=\"Ciao a tutti cari amici di iProg, oggi tratteremo un\u2019 argomento molto importante ovvero il testing,\u00a0 testare tutte le funzionalit\u00e0\u00a0 della nostra applicazione e\u2019\u00a0 molto importate poich\u00e9\u00a0 in questo modo riduciamo il numero di possibili\u00a0 bug\u00a0 all\u2019interno di quest\u2019ultima. Prima di scrivere la logica applicativa della nostra applicazione e\u2019 molto... Read more &raquo;\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@flexkid1\" \/>\n<meta name=\"twitter:site\" content=\"@iprogblog\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Diego\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/\"},\"author\":{\"name\":\"Diego\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#\\\/schema\\\/person\\\/048c8acb70f8a33f1498675ab9db41a3\"},\"headline\":\"Testare le nostre applicazioni\",\"datePublished\":\"2017-02-09T12:55:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/\"},\"wordCount\":532,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/unit-test.jpg\",\"articleSection\":[\"Objective-C iOS\",\"Objective-C Mac\",\"Objective-C Teoria\",\"Swift\",\"Un p\u00f2 di tutto\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/\",\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/\",\"name\":\"Testare le nostre applicazioni - iProg\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/unit-test.jpg\",\"datePublished\":\"2017-02-09T12:55:21+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#\\\/schema\\\/person\\\/048c8acb70f8a33f1498675ab9db41a3\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/swift\\\/testare-le-nostre-applicazioni\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/unit-test.jpg\",\"contentUrl\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/unit-test.jpg\",\"width\":400,\"height\":300},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/\",\"name\":\"iProg\",\"description\":\"perch\u00e9 reinventare la ruota?\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#\\\/schema\\\/person\\\/048c8acb70f8a33f1498675ab9db41a3\",\"name\":\"Diego\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g\",\"caption\":\"Diego\"},\"description\":\"Google+\",\"sameAs\":[\"http:\\\/\\\/it.linkedin.com\\\/in\\\/diegocaridei\\\/\",\"https:\\\/\\\/x.com\\\/flexkid1\",\"http:\\\/\\\/www.youtube.com\\\/channel\\\/UCjQ2z1ygV9tv55QAc2q3JHA\"],\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/author\\\/flexkid\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Testare le nostre applicazioni - iProg","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/","twitter_card":"summary_large_image","twitter_title":"Testare le nostre applicazioni - iProg","twitter_description":"Ciao a tutti cari amici di iProg, oggi tratteremo un\u2019 argomento molto importante ovvero il testing,\u00a0 testare tutte le funzionalit\u00e0\u00a0 della nostra applicazione e\u2019\u00a0 molto importate poich\u00e9\u00a0 in questo modo riduciamo il numero di possibili\u00a0 bug\u00a0 all\u2019interno di quest\u2019ultima. Prima di scrivere la logica applicativa della nostra applicazione e\u2019 molto... Read more &raquo;","twitter_image":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg","twitter_creator":"@flexkid1","twitter_site":"@iprogblog","twitter_misc":{"Scritto da":"Diego","Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/#article","isPartOf":{"@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/"},"author":{"name":"Diego","@id":"https:\/\/www.iprog.it\/blog\/#\/schema\/person\/048c8acb70f8a33f1498675ab9db41a3"},"headline":"Testare le nostre applicazioni","datePublished":"2017-02-09T12:55:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/"},"wordCount":532,"commentCount":0,"image":{"@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg","articleSection":["Objective-C iOS","Objective-C Mac","Objective-C Teoria","Swift","Un p\u00f2 di tutto"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/","url":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/","name":"Testare le nostre applicazioni - iProg","isPartOf":{"@id":"https:\/\/www.iprog.it\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/#primaryimage"},"image":{"@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg","datePublished":"2017-02-09T12:55:21+00:00","author":{"@id":"https:\/\/www.iprog.it\/blog\/#\/schema\/person\/048c8acb70f8a33f1498675ab9db41a3"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.iprog.it\/blog\/swift\/testare-le-nostre-applicazioni\/#primaryimage","url":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg","contentUrl":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2017\/02\/unit-test.jpg","width":400,"height":300},{"@type":"WebSite","@id":"https:\/\/www.iprog.it\/blog\/#website","url":"https:\/\/www.iprog.it\/blog\/","name":"iProg","description":"perch\u00e9 reinventare la ruota?","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.iprog.it\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/www.iprog.it\/blog\/#\/schema\/person\/048c8acb70f8a33f1498675ab9db41a3","name":"Diego","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g","caption":"Diego"},"description":"Google+","sameAs":["http:\/\/it.linkedin.com\/in\/diegocaridei\/","https:\/\/x.com\/flexkid1","http:\/\/www.youtube.com\/channel\/UCjQ2z1ygV9tv55QAc2q3JHA"],"url":"https:\/\/www.iprog.it\/blog\/author\/flexkid\/"}]}},"views":2074,"_links":{"self":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/posts\/6528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/comments?post=6528"}],"version-history":[{"count":0,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/posts\/6528\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/media\/6529"}],"wp:attachment":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/media?parent=6528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/categories?post=6528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/tags?post=6528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}