Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to android testing

59,466 views

Published on

Tutorial presented at LinuxCon 2011 North America (Vancouver, BC, Canada)

Published in: Technology
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Introduction to android testing

  1. 1. introduction to android testing a hands-on approach Copyright (C) 2011 Diego Torres Milano All rights reserved
  2. 2. diego torres milano android system engineer flextronicshttp://dtmilano.blogspot.com Copyright (C) 2011 Diego Torres Milano All rights reserved
  3. 3. “Never test the depth ofthe water with both feet.” -- Anonymous Copyright (C) 2011 Diego Torres Milano All rights reserved
  4. 4. agendaandroid testing backgroundtest driven developmentcode coveragecontinuous integrationbehavior driven development Copyright (C) 2011 Diego Torres Milano All rights reserved
  5. 5. operating systems July 2011 Android 150M iOS 222M Copyright (C) 2011 Diego Torres Milano All rights reserved
  6. 6. android testing backgroundCopyright (C) 2011 Diego Torres Milano All rights reserved
  7. 7. ?Copyright (C) 2011 Diego Torres Milano All rights reserved
  8. 8. Why ?Copyright (C) 2011 Diego Torres Milano All rights reserved
  9. 9. What Why ? Copyright (C) 2011 Diego Torres Milano All rights reserved
  10. 10. What WhyWhen ? Copyright (C) 2011 Diego Torres Milano All rights reserved
  11. 11. What WhyWhen how ? Copyright (C) 2011 Diego Torres Milano All rights reserved
  12. 12. types of test testsunit functionalperformance integration Copyright (C) 2011 Diego Torres Milano All rights reserved
  13. 13. types of testunit Copyright (C) 2011 Diego Torres Milano All rights reserved
  14. 14. types of test by programmers for programmersunit Copyright (C) 2011 Diego Torres Milano All rights reserved
  15. 15. types of test by programmers for programmersunit in a programming language Copyright (C) 2011 Diego Torres Milano All rights reserved
  16. 16. types of test by programmers for programmersunit in a programming language JUnit is the de-facto standard Copyright (C) 2011 Diego Torres Milano All rights reserved
  17. 17. types of test by programmers for programmersunit in a programming language JUnit is the de-facto standard test objects in isolation Copyright (C) 2011 Diego Torres Milano All rights reserved
  18. 18. types of test by programmers for programmersunit in a programming language JUnit is the de-facto standard test objects in isolation in a repeatable way Copyright (C) 2011 Diego Torres Milano All rights reserved
  19. 19. types of test by programmers for programmersunit in a programming language JUnit is the de-facto standard test objects in isolation in a repeatable way usually rely on mock objects Copyright (C) 2011 Diego Torres Milano All rights reserved
  20. 20. types of test testsunit functionalperformance integration Copyright (C) 2011 Diego Torres Milano All rights reserved
  21. 21. types of test functionalCopyright (C) 2011 Diego Torres Milano All rights reserved
  22. 22. types of testby business & QA people functional Copyright (C) 2011 Diego Torres Milano All rights reserved
  23. 23. types of testby business & QA people functionalin a business domain language Copyright (C) 2011 Diego Torres Milano All rights reserved
  24. 24. types of testby business & QA people functionalin a business domain languagetest completeness & correctness Copyright (C) 2011 Diego Torres Milano All rights reserved
  25. 25. types of testby business & QA people functionalin a business domain languagetest completeness & correctnessBDD has gained some popularity Copyright (C) 2011 Diego Torres Milano All rights reserved
  26. 26. types of testby business & QA people functionalin a business domain languagetest completeness & correctnessBDD has gained some popularityFitNesse can help Copyright (C) 2011 Diego Torres Milano All rights reserved
  27. 27. types of test testsunit functionalperformance integration Copyright (C) 2011 Diego Torres Milano All rights reserved
  28. 28. types of test integrationCopyright (C) 2011 Diego Torres Milano All rights reserved
  29. 29. types of testhow components work together integration Copyright (C) 2011 Diego Torres Milano All rights reserved
  30. 30. types of testhow components work together integrationmodules have been unit tested Copyright (C) 2011 Diego Torres Milano All rights reserved
  31. 31. types of testhow components work together integrationmodules have been unit testedandroid components need integrationwith the system Copyright (C) 2011 Diego Torres Milano All rights reserved
  32. 32. types of testhow components work together integrationmodules have been unit testedandroid components need integrationwith the systemtesting framework facilitatesintegration Copyright (C) 2011 Diego Torres Milano All rights reserved
  33. 33. types of test testsunit functionalperformance integration Copyright (C) 2011 Diego Torres Milano All rights reserved
  34. 34. types of testperformance Copyright (C) 2011 Diego Torres Milano All rights reserved
  35. 35. types of test measure performance in aperformance repeatable way Copyright (C) 2011 Diego Torres Milano All rights reserved
  36. 36. types of test measure performance in aperformance repeatable way if cannot be measure cannot be improved Copyright (C) 2011 Diego Torres Milano All rights reserved
  37. 37. types of test measure performance in aperformance repeatable way if cannot be measure cannot be improved premature optimization does more harm than good Copyright (C) 2011 Diego Torres Milano All rights reserved
  38. 38. types of test measure performance in aperformance repeatable way if cannot be measure cannot be improved premature optimization does more harm than good measure-change-measure Copyright (C) 2011 Diego Torres Milano All rights reserved
  39. 39. types of test testsunit functionalperformance integration Copyright (C) 2011 Diego Torres Milano All rights reserved
  40. 40. class diagram Assert <<iface>> TestCase Test InstrumentationTestCase AndroidTestCase ActivityInstrumentationTestCase2ActivityUnitTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  41. 41. InstrumentationTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  42. 42. InstrumentationTestCase instrumentation instantiated before application Copyright (C) 2011 Diego Torres Milano All rights reserved
  43. 43. InstrumentationTestCase instrumentation instantiated before application allows for monitoring interaction Copyright (C) 2011 Diego Torres Milano All rights reserved
  44. 44. InstrumentationTestCase instrumentation instantiated before application allows for monitoring interaction send keys and input events Copyright (C) 2011 Diego Torres Milano All rights reserved
  45. 45. InstrumentationTestCase instrumentation instantiated before application allows for monitoring interaction send keys and input events manual lifecycle Copyright (C) 2011 Diego Torres Milano All rights reserved
  46. 46. InstrumentationTestCase instrumentation instantiated before application allows for monitoring interaction send keys and input events manual lifecycle direct or indirect base class of other tests Copyright (C) 2011 Diego Torres Milano All rights reserved
  47. 47. class diagram Assert <<iface>> TestCase Test InstrumentationTestCase AndroidTestCase ActivityInstrumentationTestCase2ActivityUnitTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  48. 48. ActivityUnitTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  49. 49. ActivityUnitTestCase isolated testing of single Activity Copyright (C) 2011 Diego Torres Milano All rights reserved
  50. 50. ActivityUnitTestCase isolated testing of single Activity minimal connection to the system Copyright (C) 2011 Diego Torres Milano All rights reserved
  51. 51. ActivityUnitTestCase isolated testing of single Activity minimal connection to the system uses mocks for dependencies Copyright (C) 2011 Diego Torres Milano All rights reserved
  52. 52. ActivityUnitTestCase isolated testing of single Activity minimal connection to the system uses mocks for dependencies some Activity methods should not be called Copyright (C) 2011 Diego Torres Milano All rights reserved
  53. 53. class diagram Assert <<iface>> TestCase Test InstrumentationTestCase AndroidTestCase ActivityInstrumentationTestCase2ActivityUnitTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  54. 54. ActivityInstrumentationTestCase2Copyright (C) 2011 Diego Torres Milano All rights reserved
  55. 55. ActivityInstrumentationTestCase2functionaltesting of a single Activity Copyright (C) 2011 Diego Torres Milano All rights reserved
  56. 56. ActivityInstrumentationTestCase2functionaltesting of a single Activityhas access to Instrumentation Copyright (C) 2011 Diego Torres Milano All rights reserved
  57. 57. ActivityInstrumentationTestCase2functionaltesting of a single Activityhas access to Instrumentationcreates the AUT using systeminfrastructure Copyright (C) 2011 Diego Torres Milano All rights reserved
  58. 58. ActivityInstrumentationTestCase2functionaltesting of a single Activityhas access to Instrumentationcreates the AUT using systeminfrastructurecustom intent can be provided Copyright (C) 2011 Diego Torres Milano All rights reserved
  59. 59. class diagram Assert <<iface>> TestCase Test InstrumentationTestCase AndroidTestCase ActivityInstrumentationTestCase2ActivityUnitTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  60. 60. AndroidTestCaseCopyright (C) 2011 Diego Torres Milano All rights reserved
  61. 61. access to Context AndroidTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  62. 62. access to Context AndroidTestCaseaccess to Resources Copyright (C) 2011 Diego Torres Milano All rights reserved
  63. 63. access to Context AndroidTestCaseaccess to Resourcesbase class for Application, Providerand Service test cases Copyright (C) 2011 Diego Torres Milano All rights reserved
  64. 64. access to Context AndroidTestCaseaccess to Resourcesbase class for Application, Providerand Service test casesContext stored in mContext field Copyright (C) 2011 Diego Torres Milano All rights reserved
  65. 65. access to Context AndroidTestCaseaccess to Resourcesbase class for Application, Providerand Service test casesContext stored in mContext fieldcan start more than one Activity Copyright (C) 2011 Diego Torres Milano All rights reserved
  66. 66. class diagram Assert <<iface>> TestCase Test InstrumentationTestCase AndroidTestCase ActivityInstrumentationTestCase2ActivityUnitTestCase Copyright (C) 2011 Diego Torres Milano All rights reserved
  67. 67. test driven development Copyright (C) 2011 Diego Torres Milano All rights reserved
  68. 68. test driven development advantages: •the tests are written one way or another •developers take more responsibility for the quality of their work Copyright (C) 2011 Diego Torres Milano All rights reserved
  69. 69. test driven development advantages: •the tests are written one way or another •developers take more responsibility for the quality of their work strategy of writing tests along development Copyright (C) 2011 Diego Torres Milano All rights reserved
  70. 70. test driven development advantages: •the tests are written one way or another •developers take more responsibility for the quality of their work strategy of writing tests along development test cases written prior to the code Copyright (C) 2011 Diego Torres Milano All rights reserved
  71. 71. test driven development advantages: •the tests are written one way or another •developers take more responsibility for the quality of their work strategy of writing tests along development test cases written prior to the code single test added, then the code to satisfy it Copyright (C) 2011 Diego Torres Milano All rights reserved
  72. 72. activity diagram design decisions are taken in single steps and finally the code write test satisfying the tests is improved by refactoring it run [fails] code[passes] refactor Copyright (C) 2011 Diego Torres Milano All rights reserved
  73. 73. temperature converter Title celsius 100 autoupdate 32fahrenheit keyboard Copyright (C) 2011 Diego Torres Milano All rights reserved
  74. 74. requirementsCopyright (C) 2011 Diego Torres Milano All rights reserved
  75. 75. requirements converts between temperature units one temperature is entered and the other is updated error is displayed in the field right aligned, 2 decimal digits entry fields start emptyCopyright (C) 2011 Diego Torres Milano All rights reserved
  76. 76. understanding requirementsCopyright (C) 2011 Diego Torres Milano All rights reserved
  77. 77. understanding requirementsto write a test you must understand therequirement Copyright (C) 2011 Diego Torres Milano All rights reserved
  78. 78. understanding requirementsto write a test you must understand therequirementdestination is quickly identified Copyright (C) 2011 Diego Torres Milano All rights reserved
  79. 79. understanding requirementsto write a test you must understand therequirementdestination is quickly identifiedif requirement change, changing thecorresponding test helps verify it Copyright (C) 2011 Diego Torres Milano All rights reserved
  80. 80. github$ mkdir myworkdir$ cd myworkdir$ git clone git@github.com:dtmilano/ TemperatureConverter.git$ git clone git://github.com/dtmilano/ TemperatureConverterTests.git Copyright (C) 2011 Diego Torres Milano All rights reserved
  81. 81. creating the main projectTemperatureConverter uses conventional settings Copyright (C) 2011 Diego Torres Milano All rights reserved
  82. 82. creating the main projectTemperatureConverter uses conventional settings Copyright (C) 2011 Diego Torres Milano All rights reserved
  83. 83. creating the test projectAutomatically selected valuesfor TemperatureConverterTest project Copyright (C) 2011 Diego Torres Milano All rights reserved
  84. 84. creating the test case Use:ActivityInstrumentationTestCase2 as the base classTemperatureConverterActivity as the class under test Copyright (C) 2011 Diego Torres Milano All rights reserved
  85. 85. warning due to the parameterized base classcreating the test case Use:ActivityInstrumentationTestCase2 as the base classTemperatureConverterActivity as the class under test Copyright (C) 2011 Diego Torres Milano All rights reserved
  86. 86. constructor/** * Constructor * @param name */public TemperatureConverterActivityTests(String name) { super(TemperatureConverterActivity.class); setName(name);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  87. 87. fixtureprotected void setUp(String name) throws Exception { super.setUp(); mActivity = getActivity(); reference the assertNotNull(mActivity); main package mCelsius = (EditText)mActivity.findViewById(com...); assertNotNull(mCelsius); mFahrenheit = (EditText)mActivity.findViewById(com...); assertNotNull(mFahrenheit);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  88. 88. layoutsatisfy the test needs Copyright (C) 2011 Diego Torres Milano All rights reserved
  89. 89. ui tests: visibility@SmallTestpublic void testFieldsOnScreen() { final View origin = mActivity.getWindow().getDecorView(); ViewAsserts.assertOnScreen(origin, mCelsius); ViewAsserts.assertOnScreen(origin, mFahrenheit);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  90. 90. ui tests: alignment@SmallTestpublic void testAlignment() {! ! ViewAsserts.assertRightAligned(mCelsius, mFahrenheit);! ! ViewAsserts.assertLeftAligned(mCelsius, mFahrenheit);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  91. 91. ui tests: initialization@SmallTestpublic void testFieldsShouldStartEmpty() {! ! assertTrue("".equals(mCelsius.getText() .toString()));! ! assertTrue("".equals(mFahrenheit.getText() .toString()));} Copyright (C) 2011 Diego Torres Milano All rights reserved
  92. 92. ui tests: justification@SmallTestpublic void testJustification() {! ! final int expected = Gravity.RIGHT|Gravity.CENTER_VERTICAL;! ! assertEquals(expected, mCelsius.getGravity());! ! assertEquals(expected, mFahrenheit.getGravity());} Copyright (C) 2011 Diego Torres Milano All rights reserved
  93. 93. running the tests video plays on click >>> Copyright (C) 2011 Diego Torres Milano All rights reserved
  94. 94. running the tests video plays on click >>> Copyright (C) 2011 Diego Torres Milano All rights reserved
  95. 95. gravity add right andcenter_vertical gravity for celsius and fahrenheit Copyright (C) 2011 Diego Torres Milano All rights reserved
  96. 96. gravity add right andcenter_vertical gravity for celsius and fahrenheit Copyright (C) 2011 Diego Torres Milano All rights reserved
  97. 97. running the tests video plays on click >>> Copyright (C) 2011 Diego Torres Milano All rights reserved
  98. 98. running the tests video plays on click >>> Copyright (C) 2011 Diego Torres Milano All rights reserved
  99. 99. temperature conversion! @UiThreadTest! public void testFahrenheitToCelsiusConversion() {! ! mCelsius.clear();! ! mFahrenheit.clear(); errors are underlined in red! ! final double f = 32.5;! ! mFahrenheit.requestFocus();! ! mFahrenheit.setNumber(f);! ! mCelsius.requestFocus();! ! final double expected = TemperatureConverter.fahrenheitToCelsius(f);! ! final double actual = mCelsius.getNumber();! ! final double delta = Math.abs(expected - actual);! ! assertTrue(delta < 0.005);! } Copyright (C) 2011 Diego Torres Milano All rights reserved
  100. 100. temperature conversionrun in the ui! @UiThreadTest thread! public void testFahrenheitToCelsiusConversion() {! ! mCelsius.clear();! ! mFahrenheit.clear(); errors are underlined in red! ! final double f = 32.5;! ! mFahrenheit.requestFocus();! ! mFahrenheit.setNumber(f);! ! mCelsius.requestFocus();! ! final double expected = TemperatureConverter.fahrenheitToCelsius(f);! ! final double actual = mCelsius.getNumber();! ! final double delta = Math.abs(expected - actual);! ! assertTrue(delta < 0.005);! } Copyright (C) 2011 Diego Torres Milano All rights reserved
  101. 101. temperature conversionrun in the ui! @UiThreadTest thread! public void testFahrenheitToCelsiusConversion() { specialized class! ! mCelsius.clear();! ! mFahrenheit.clear(); errors are underlined in red! ! final double f = 32.5;! ! mFahrenheit.requestFocus();! ! mFahrenheit.setNumber(f);! ! mCelsius.requestFocus();! ! final double expected = TemperatureConverter.fahrenheitToCelsius(f);! ! final double actual = mCelsius.getNumber();! ! final double delta = Math.abs(expected - actual);! ! assertTrue(delta < 0.005);! } Copyright (C) 2011 Diego Torres Milano All rights reserved
  102. 102. temperature conversion run in the ui! @UiThreadTest thread! public void testFahrenheitToCelsiusConversion() { specialized class! ! mCelsius.clear();! ! mFahrenheit.clear(); errors are underlined in red! ! final double f = 32.5;! ! mFahrenheit.requestFocus();! ! mFahrenheit.setNumber(f); converter! ! mCelsius.requestFocus(); helper! ! final double expected = TemperatureConverter.fahrenheitToCelsius(f);! ! final double actual = mCelsius.getNumber();! ! final double delta = Math.abs(expected - actual);! ! assertTrue(delta < 0.005);! } Copyright (C) 2011 Diego Torres Milano All rights reserved
  103. 103. EditNumber class EditNumber class extends EditText Copyright (C) 2011 Diego Torres Milano All rights reserved
  104. 104. TemperatureCon verterTemperatureConverter is a helper class Copyright (C) 2011 Diego Torres Milano All rights reserved
  105. 105. exceptionjava.lang.ClassCastException: android.widget.EditText at com.example.i2at.tc.test. TemperatureConverterActivityTests.setUp (TemperatureConverterActivityTests.java: 44) Copyright (C) 2011 Diego Torres Milano All rights reserved
  106. 106. exceptionjava.lang.ClassCastException: android.widget.EditText at com.example.i2at.tc.test. TemperatureConverterActivityTests.setUp (TemperatureConverterActivityTests.java: 44)44:!! mCelsius = (EditNumber) mActivity.findViewById( com.example.i2at.tc.R.id.celsius); Copyright (C) 2011 Diego Torres Milano All rights reserved
  107. 107. layout<com.example.i2at.tc.EditNumber android:layout_height="wrap_content"! ! android:layout_width="match_parent" android:inputType="numberDecimal"! ! android:id="@+id/celsius" android:gravity="right|center_vertical">! ! <requestFocus /></com.example.i2at.tc.EditNumber> Copyright (C) 2011 Diego Torres Milano All rights reserved
  108. 108. running the tests Copyright (C) 2011 Diego Torres Milano All rights reserved
  109. 109. running the tests what? Copyright (C) 2011 Diego Torres Milano All rights reserved
  110. 110. celsius to fahrenheit Fahrenheit 150112.5 75 37.5 0-37.5 -75 -40 -30 -20 -10 0 10 20 30 40 Celsius Copyright (C) 2011 Diego Torres Milano All rights reserved
  111. 111. celsius to fahrenheit Fahrenheit 150112.5 75 f = 9/5 * c + 32 37.5 0 c = (f-32) * 5/9-37.5 -75 -40 -30 -20 -10 0 10 20 30 40 Celsius Copyright (C) 2011 Diego Torres Milano All rights reserved
  112. 112. converterpublic class TemperatureConverter {! public static double fahrenheitToCelsius(double f) { / TODO Auto-generated method stub /! ! return 0;! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  113. 113. TemperatureConv erterTests Test case as base class create method stubs TemperatureConverter as CUT Copyright (C) 2011 Diego Torres Milano All rights reserved
  114. 114. method stubsselect the methods you want stubs created for Copyright (C) 2011 Diego Torres Milano All rights reserved
  115. 115. conversion testpublic void testFahrenheitToCelsius() {! ! for (double c: sConversionTableDouble.keySet()) {! ! ! final double f = sConversionTableDouble.get(c);! ! ! final double ca = TemperatureConverter.fahrenheitToCelsius(f);! ! ! final double delta = Math.abs(ca - c);! ! ! assertTrue(delta < 0.005);! ! }! } Copyright (C) 2011 Diego Torres Milano All rights reserved
  116. 116. conversion tableprivate static final HashMap<Double, Double> sConversionTableDouble =! ! ! new HashMap<Double, Double>();!static {! ! sConversionTableDouble.put(0.0, 32.0);! ! sConversionTableDouble.put(100.0, 212.0);! ! sConversionTableDouble.put(-1.0, 30.20);! ! sConversionTableDouble.put(-100.0, -148.0);! ! sConversionTableDouble.put(32.0, 89.60);! ! sConversionTableDouble.put(-40.0, -40.0);! ! sConversionTableDouble.put(-273.0, -459.40);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  117. 117. run the testsCopyright (C) 2011 Diego Torres Milano All rights reserved
  118. 118. run the tests this assertion failsCopyright (C) 2011 Diego Torres Milano All rights reserved
  119. 119. creating test caseuse AndroidTestCase as base class use EditNumber as CUT Copyright (C) 2011 Diego Torres Milano All rights reserved
  120. 120. method stubsselect the Context constructor select other methods Copyright (C) 2011 Diego Torres Milano All rights reserved
  121. 121. testpublic final void testClear() {! ! final String value = "123.45";! ! mEditNumber.setText(value);! ! mEditNumber.clear();! ! final String expected = "";! ! final String actual = mEditNumber.getText().toString();! ! assertEquals(expected, actual);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  122. 122. implementationpublic class EditNumber extends EditText { / ... /! public void clear() {! ! setText("");! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  123. 123. testpublic final void testSetNumber() {! ! final double d = 123.45;! ! mEditNumber.setNumber(d);! ! final String expected = Double.toString(d);! ! final String actual = mEditNumber.getText().toString();! ! assertEquals(expected, actual);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  124. 124. testpublic final void testGetNumber() {! ! final double expected = 123.45;! ! mEditNumber.setNumber(expected);! ! final double actual = mEditNumber.getNumber();! ! assertEquals(expected, actual);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  125. 125. implementationpublic class EditNumber extends EditText { / ... /! public void getNumber() { final String s = getText().toString(); if ( "".equals(s) ) { return Double.NaN; }! ! return Double.valueOf(s);! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  126. 126. run the tests NO videoCopyright (C) 2011 Diego Torres Milano All rights reserved
  127. 127. what’s the problem ? Copyright (C) 2011 Diego Torres Milano All rights reserved
  128. 128. what’s the problem ?clear() worksrequestFocus() workssetNumber() worksfahrenheitToCelsius() worksgetNumber() worksso ? Copyright (C) 2011 Diego Torres Milano All rights reserved
  129. 129. temperature converter Title celsius 100 32fahrenheit keyboard Copyright (C) 2011 Diego Torres Milano All rights reserved
  130. 130. temperature converter Title celsius 100 autoupdate 32fahrenheit keyboard Copyright (C) 2011 Diego Torres Milano All rights reserved
  131. 131. TemperatureChan geWatcher create it as an inner class implements TextWatcher inherited abstract methods create 2 fields mSource & mDest Copyright (C) 2011 Diego Torres Milano All rights reserved
  132. 132. generateconstructor use the fieldsomit call to super() Copyright (C) 2011 Diego Torres Milano All rights reserved
  133. 133. the watcherpublic abstract class TemperatureChangeWatcher implements TextWatcher {! ! private EditNumber mSource;! ! private EditNumber mDest;! !! ! public TemperatureChangeWatcher( EditNumber source, EditNumber dest) {! ! ! this.mSource = source;! ! ! this.mDest = dest;! ! } / ... /} Copyright (C) 2011 Diego Torres Milano All rights reserved
  134. 134. on text changed@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {! if ( !mDest.hasWindowFocus() || mDest.hasFocus() || s == null ) return;! final String str = s.toString();! if ( "".equals(str) ) {! ! mDest.setText(""); return;! }! try {! ! final double result = convert(Double.parseDouble(str));! ! mDest.setNumber(result);! }! catch (NumberFormatException e) {! ! / WARNING: this is thrown while a number is entered, for example just a - /! }! catch (Exception e) {! ! mSource.setError("ERROR: " + e.getLocalizedMessage());! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  135. 135. on text changed@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {! if ( !mDest.hasWindowFocus() || mDest.hasFocus() || s == null ) return;! final String str = s.toString();! if ( "".equals(str) ) {! ! mDest.setText(""); return; we should! } define it! try {! ! final double result = convert(Double.parseDouble(str));! ! mDest.setNumber(result);! }! catch (NumberFormatException e) {! ! / WARNING: this is thrown while a number is entered, for example just a - /! }! catch (Exception e) {! ! mSource.setError("ERROR: " + e.getLocalizedMessage());! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  136. 136. abstract convert methodpublic abstract class TemperatureChangeWatcher implements TextWatcher { //... protected abstract double convert(double temp); //...} Copyright (C) 2011 Diego Torres Milano All rights reserved
  137. 137. find views@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mCelsius = (EditNumber) findViewById(R.id.celsius); mFahrenheit = (EditNumber) findViewById(R.id.fahrenheit);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  138. 138. add change listeners@Overridepublic void onCreate(Bundle savedInstanceState) { / ... / mCelsius.addTextChangedListener( we should new TemperatureChangeWatcher(mCelsius, mFahrenheit) { create it! ! ! @Override protected double convert(double temp) {! ! ! ! return TemperatureConverter.celsiusToFahrenheit(temp);! ! ! }! }); mFahrenheit.addTextChangedListener( new TemperatureChangeWatcher(mFahrenheit, mCelsius) {! ! ! @Override protected double convert(double temp) {! ! ! ! return TemperatureConverter.fahrenheitToCelsius(temp);! ! ! } }); } Copyright (C) 2011 Diego Torres Milano All rights reserved
  139. 139. add conversionpublic class TemperatureConverter {! public static double fahrenheitToCelsius(double f) {! ! return (f-32) * 5/9.0;! }! public static double celsiusToFahrenheit(double c) {! ! / TODO Auto-generated method stub /! ! return 0;! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  140. 140. adding testpublic class TemperatureConverterTests extends TestCase { / ... /! /**! * Test method for {@link TemperatureConverter#fahrenheitToCelsius(double)}.! */! public void testCelsiusToFahrenheit() {! ! for (double c: sConversionTableDouble.keySet()) {! ! ! final double f = sConversionTableDouble.get(c);! ! ! final double fa = TemperatureConverter.celsiusToFahrenheit(c);! ! ! final double delta = Math.abs(fa - f);! ! ! assertTrue("delta=" + delta + " for f=" + f + " fa=" + fa, delta < 0.005);! ! }! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  141. 141. running the tests Copyright (C) 2011 Diego Torres Milano All rights reserved
  142. 142. implementing conversionpublic class TemperatureConverter {! public static double fahrenheitToCelsius(double f) {! ! return (f-32) * 5/9.0;! }! public static double celsiusToFahrenheit(double c) {! ! return 9/5.0 * c + 32;! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  143. 143. running the tests Copyright (C) 2011 Diego Torres Milano All rights reserved
  144. 144. code coverageCopyright (C) 2011 Diego Torres Milano All rights reserved
  145. 145. code coverageCopyright (C) 2011 Diego Torres Milano All rights reserved
  146. 146. code coveragemeasures the amount of source code tested Copyright (C) 2011 Diego Torres Milano All rights reserved
  147. 147. code coveragemeasures the amount of source code testedandroid relies on emma (http://emma.sf.net) Copyright (C) 2011 Diego Torres Milano All rights reserved
  148. 148. code coveragemeasures the amount of source code testedandroid relies on emma (http://emma.sf.net)supported coverage types: class method line block Copyright (C) 2011 Diego Torres Milano All rights reserved
  149. 149. coverage reportCopyright (C) 2011 Diego Torres Milano All rights reserved
  150. 150. coverage reportoverall coverage summary Copyright (C) 2011 Diego Torres Milano All rights reserved
  151. 151. coverage reportoverall coverage summaryoverall stats summary Copyright (C) 2011 Diego Torres Milano All rights reserved
  152. 152. coverage reportoverall coverage summaryoverall stats summarycoverage breakdown by package Copyright (C) 2011 Diego Torres Milano All rights reserved
  153. 153. building with antdisable project’s Build Automatically in Eclipseconvert project to ant$ android update project --path $PWD --nameTemperatureConverter --target android-10$ android update test-project --main ../TemperatureConverter --path $PWD Copyright (C) 2011 Diego Torres Milano All rights reserved
  154. 154. run configuration coveragerun build.xml as Ant build... use coverage target Copyright (C) 2011 Diego Torres Milano All rights reserved
  155. 155. ant 1.8specify ant 1.8 home Ant home... Copyright (C) 2011 Diego Torres Milano All rights reserved
  156. 156. coveragerun build.xml coveragecoverage analysis report is generatedget coverage file$ adb pull /data/data/com.example.i2at.tc/files/coverage.ec coverage.ec Copyright (C) 2011 Diego Torres Milano All rights reserved
  157. 157. coverage reportCopyright (C) 2011 Diego Torres Milano All rights reserved
  158. 158. coverage reportCopyright (C) 2011 Diego Torres Milano All rights reserved
  159. 159. importing coverage fileimport the coverage session into Eclipse Copyright (C) 2011 Diego Torres Milano All rights reserved
  160. 160. coverage sessionselect the project folders Copyright (C) 2011 Diego Torres Milano All rights reserved
  161. 161. convert not covered Copyright (C) 2011 Diego Torres Milano All rights reserved
  162. 162. adding missing test@UiThreadTestpublic void testCelsiusToFahrenheitConversion() { ! mCelsius.clear();! ! mFahrenheit.clear();! ! final double c = 32.5;! ! mCelsius.requestFocus();! ! mCelsius.setNumber(c);! ! mCelsius.requestFocus();! ! final double expected = TemperatureConverter.celsiusToFahrenheit(c);! ! final double actual = mFahrenheit.getNumber();! ! final double delta = Math.abs(expected - actual);! ! assertTrue("delta=" + delta, delta < 0.005);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  163. 163. coverageCopyright (C) 2011 Diego Torres Milano All rights reserved
  164. 164. constructor not covered Copyright (C) 2011 Diego Torres Milano All rights reserved
  165. 165. private constructorpublic class TemperatureConverter {! private TemperatureConverter() {! ! / do nothing /! }! public static double fahrenheitToCelsius(double f) {! ! return (f-32) * 5/9.0;! }! public static double celsiusToFahrenheit(double c) {! ! return 9/5.0 * c + 32;! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  166. 166. access private constructorpublic final void testPrivateConstructor() throws SecurityException, NoSuchMethodException,! ! ! IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {! Constructor<TemperatureConverter> ctor =! ! ! TemperatureConverter.class.getDeclaredConstructor();! ctor.setAccessible(true);! TemperatureConverter tc = ctor.newInstance((Object[])null);! assertNotNull(tc);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  167. 167. access private constructorpublic final void testPrivateConstructor() throws SecurityException, NoSuchMethodException,! ! ! IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {! Constructor<TemperatureConverter> ctor = circumvent! ! ! TemperatureConverter.class.getDeclaredConstructor(); restriction! ctor.setAccessible(true);! TemperatureConverter tc = ctor.newInstance((Object[])null);! assertNotNull(tc);} Copyright (C) 2011 Diego Torres Milano All rights reserved
  168. 168. coverage reportCopyright (C) 2011 Diego Torres Milano All rights reserved
  169. 169. finished applicationthis is the final result Copyright (C) 2011 Diego Torres Milano All rights reserved
  170. 170. requirements converts between temperature units one temperature is entered and the other is updated error is displayed in the field right aligned, 2 decimal digits entry fields start emptyCopyright (C) 2011 Diego Torres Milano All rights reserved
  171. 171. continuous integration Copyright (C) 2011 Diego Torres Milano All rights reserved
  172. 172. continuous integrationagile technique for software engineeringreceived broad adoption in recent yearsprevents “integration hell”integrate changes frequently Copyright (C) 2011 Diego Torres Milano All rights reserved
  173. 173. requirementsversion control systemautomated buildself testedartifacts and tests results easy to find Copyright (C) 2011 Diego Torres Milano All rights reserved
  174. 174. installationdownload war from http://hudson-ci.org$ java -jar hudson.war Copyright (C) 2011 Diego Torres Milano All rights reserved
  175. 175. hudson homeCopyright (C) 2011 Diego Torres Milano All rights reserved
  176. 176. android pluginCopyright (C) 2011 Diego Torres Milano All rights reserved
  177. 177. android sdk rootCopyright (C) 2011 Diego Torres Milano All rights reserved
  178. 178. new jobCopyright (C) 2011 Diego Torres Milano All rights reserved
  179. 179. ant propertiesCopyright (C) 2011 Diego Torres Milano All rights reserved
  180. 180. build artifactsCopyright (C) 2011 Diego Torres Milano All rights reserved
  181. 181. build dependency these are the TemperatureConverterTest project options. This depends on TemperatureConverter. Copyright (C) 2011 Diego Torres Milano All rights reserved
  182. 182. android emulatorCopyright (C) 2011 Diego Torres Milano All rights reserved
  183. 183. android emulatorCopyright (C) 2011 Diego Torres Milano All rights reserved
  184. 184. build with antCopyright (C) 2011 Diego Torres Milano All rights reserved
  185. 185. xml test resultsdownload xmlinstrumentationtestrunner.jarreplace instrumentation byandroid:name="com.neenbedankt.android.test.XMLInstrumentationTestRunner"customize build.xml Copyright (C) 2011 Diego Torres Milano All rights reserved
  186. 186. junit test resultCopyright (C) 2011 Diego Torres Milano All rights reserved
  187. 187. test reportCopyright (C) 2011 Diego Torres Milano All rights reserved
  188. 188. behavior driven developmentCopyright (C) 2011 Diego Torres Milano All rights reserved
  189. 189. behavior driven developmentevolution of Test Driven Developmentinclusion of business participantcommon vocabularybased on Neuro Linguistics Programming Copyright (C) 2011 Diego Torres Milano All rights reserved
  190. 190. fitnesseCopyright (C) 2011 Diego Torres Milano All rights reserved
  191. 191. test suiteCopyright (C) 2011 Diego Torres Milano All rights reserved
  192. 192. slim test fixturepackage com.example.i2at.tc.test.fitnesse.fixture;import com.example.i2at.tc.TemperatureConverter;public class TemperatureConverterCelsiusToFahrenheitFixture {! private double celsius;! public void setCelsius(double celsius) {! ! this.celsius = celsius;! }! public String fahrenheit() throws Exception {! ! try {! ! ! return String.valueOf(TemperatureConverter.celsiusToFahrenheit(celsius));! ! } catch (RuntimeException e) {! ! ! return e.getLocalizedMessage();! ! }! }} Copyright (C) 2011 Diego Torres Milano All rights reserved
  193. 193. test runCopyright (C) 2011 Diego Torres Milano All rights reserved
  194. 194. questions ?Copyright (C) 2011 Diego Torres Milano All rights reserved
  195. 195. android application testing guide Copyright (C) 2011 Diego Torres Milano All rights reserved
  196. 196. android application testing guide Apply testing techniques and tools• Learn the nuances of Unit and Functional testing• Understand different development methodologies such as TDD and BDD• Apply Continuous Integration• Improve applications using performance tests• Expose your application to a wide range of conditions Copyright (C) 2011 Diego Torres Milano All rights reserved
  197. 197. thank youCopyright (C) 2011 Diego Torres Milano All rights reserved

×