SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Введение
Android testing framework
   Continuous Integration
                 Summary




  Тестирование приложений
   на платформе Android

         Ивашнёв Дмитрий
    email: 0xff0x666@gmail.com
           skype: oxffdx


               9 апреля 2011 г.




                    xffox    Android Testing
Введение
                 Android testing framework
                    Continuous Integration
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
                 Android testing framework   Юнит тестирование
                    Continuous Integration   Архитектура
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
            Android testing framework   Юнит тестирование
               Continuous Integration   Архитектура
                             Summary




Подход к тестированию
    Автоматическое
    Тесты как часть кода
Юнит тестирование




                                xffox    Android Testing
Введение
            Android testing framework   Юнит тестирование
               Continuous Integration   Архитектура
                             Summary




Подход к тестированию
    Автоматическое
    Тесты как часть кода
Юнит тестирование




                                xffox    Android Testing
Введение
                  Android testing framework   Юнит тестирование
                     Continuous Integration   Архитектура
                                   Summary


Unit testing



  Проверка на корректность отдельных модулей
  Инструментарий:
      Test case
      Assertions
      Mock objects
      Test case runner




                                      xffox    Android Testing
Введение
                  Android testing framework   Юнит тестирование
                     Continuous Integration   Архитектура
                                   Summary


Unit testing



  Проверка на корректность отдельных модулей
  Инструментарий:
      Test case
      Assertions
      Mock objects
      Test case runner




                                      xffox    Android Testing
Введение
                  Android testing framework   Юнит тестирование
                     Continuous Integration   Архитектура
                                   Summary


Unit testing



  Проверка на корректность отдельных модулей
  Инструментарий:
      Test case
      Assertions
      Mock objects
      Test case runner




                                      xffox    Android Testing
Введение
                  Android testing framework   Юнит тестирование
                     Continuous Integration   Архитектура
                                   Summary


Unit testing



  Проверка на корректность отдельных модулей
  Инструментарий:
      Test case
      Assertions
      Mock objects
      Test case runner




                                      xffox    Android Testing
Введение
                 Android testing framework   Юнит тестирование
                    Continuous Integration   Архитектура
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
               Android testing framework   Юнит тестирование
                  Continuous Integration   Архитектура
                                Summary


What can I do



  TestCase - базовый класс, от которого наследуются тестовые
  классы. В тестирующем фреймворке могут быть классы,
  расширяющие базовый функционал.
  В тестовый класс добавляются методы, содержащие
  тестирующий код.
  Методы, начинающиеся с "test"автоматически распознаются
  как тестовые методы, которые будут вызваны при
  тестировании.




                                   xffox    Android Testing
Введение
               Android testing framework   Юнит тестирование
                  Continuous Integration   Архитектура
                                Summary


What can I do



  В методы setUp() и tearDown() добавляется код, который
  будет вызываться перед и после каждого теста соответственно
  (fixture).
  Для проверки корректности работы используются ассерты
  (assertEquals(), assertFalse(), assertNull(), ...).
  Тестирующий фреймворк может содержать дополнительные
  ассерты.




                                   xffox    Android Testing
Введение
                        Android testing framework          Юнит тестирование
                           Continuous Integration          Архитектура
                                         Summary


Пример чистого Junit
  public class CoverageTest extends TestCase
  {
      public void testBounding ()
      {
          ArrayList < Circle > circles = new ArrayList < Circle >() ;
          circles . add ( new Circle ( new Point (.0 , .0) , 2.0) ) ;

           Coverage coverage = new Coverage ( circles ) ;

           Rectangle boundingRect = coverage . g e t B o u n d i n g R e c t a n g l e () ;
           assertEquals ( boundingRect .x , -2.0) ;
           assertEquals ( boundingRect .y , 2.0) ;
           assertEquals ( boundingRect . x + boundingRect . width , 2.0) ;
           assertEquals ( boundingRect . y - boundingRect . height , -2.0) ;
      }

      public void testIntersection ()
      {
          ArrayList < Circle > circles = new ArrayList < Circle >() ;
          circles . add ( new Circle ( new Point (.0 , .0) , 2.0) ) ;

           Coverage coverage = new Coverage ( circles ) ;

           assertTrue ( coverage . isInIntersection ( new Point (.0 , .0) ) ) ;
      }
  }



                                               xffox        Android Testing
Введение
               Android testing framework   Юнит тестирование
                  Continuous Integration   Архитектура
                                Summary


Какими должны быть тесты
  F.I.R.S.T. (из Clean Code)
       Быстрые (Fast) - если тесты будут медленными будет
       возникать желание запускать их реже.
       Независимые (Independent) - один тест не должен влиять
       на исход другого.
       Повторямые (Repeatable) - повторный запуск тестов
       должен быть возможен в любом окружении и должен
       возвращать одинаковый результат.
       Самодостаточные (Self-Validating) - тесты либо проходят
       либо нет, не нужны дополнительные действия для
       установления результата.
       Своевременные (Timely) - при несвоевременном написании
       тестов могут возникнуть проблемы с их интеграцией так
       как код мог не проектироваться с учетом его
       тестируемости.
                                   xffox    Android Testing
Введение
                                             Введение
                 Android testing framework
                                             Последовательность действий
                    Continuous Integration
                                             Специфические тесты для компонентов
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
                                         Введение
             Android testing framework
                                         Последовательность действий
                Continuous Integration
                                         Специфические тесты для компонентов
                              Summary


Состав



     Основан на JUnit (версия 3)
     Специфические тесты для компонентов (*TestCase
     классы, asserts, mocks)
     Упаковывается в пакет как и приложение
     Допонительные утилиты (monkeyrunner - API для
     тестирования на python; Monkey:))




                                 xffox    Android Testing
Введение
                                             Введение
                 Android testing framework
                                             Последовательность действий
                    Continuous Integration
                                             Специфические тесты для компонентов
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
                                         Введение
             Android testing framework
                                         Последовательность действий
                Continuous Integration
                                         Специфические тесты для компонентов
                              Summary


Eclipse

  New->Project->Android->Android Test Project




                                 xffox    Android Testing
Введение
                                            Введение
                Android testing framework
                                            Последовательность действий
                   Continuous Integration
                                            Специфические тесты для компонентов
                                 Summary


Eclipse



  Test Project Name.
  Test Target: An existing
  Android project, или нажать
  Browse и выбрать нужный
  проект.
  Build Target.
  Application name.
  Package name.
  Нажать Finish.




                                    xffox    Android Testing
Введение
                                      Введение
          Android testing framework
                                      Последовательность действий
             Continuous Integration
                                      Специфические тесты для компонентов
                           Summary


Eclipse




                              xffox    Android Testing
Введение
                                      Введение
          Android testing framework
                                      Последовательность действий
             Continuous Integration
                                      Специфические тесты для компонентов
                           Summary


Eclipse




                              xffox    Android Testing
Введение
                                         Введение
             Android testing framework
                                         Последовательность действий
                Continuous Integration
                                         Специфические тесты для компонентов
                              Summary


Other IDEs


  $ android create test-project -m <main_path> -n
  <project_name> -p <test_path>

  $ ant install

  $ adb shell am instrument -w
  <test_package_name>/<runner_class>

  runner_class обычно InstrumentationTestRunner




                                 xffox    Android Testing
Введение
                                             Введение
                 Android testing framework
                                             Последовательность действий
                    Continuous Integration
                                             Специфические тесты для компонентов
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
                                                                 Введение
                            Android testing framework
                                                                 Последовательность действий
                               Continuous Integration
                                                                 Специфические тесты для компонентов
                                             Summary


AndroidTestCase

  Базовый класс TestCase

  Предоставляет доступ к Context и содержит ассерты для
  тестирования прав доступа
  Context getContext ()
  void setContext ( Context context )
  void a s s e r t A c t i v i t y R e q u i r e s P e r m i s s i o n ( String packageName , String className ,
        String permission )
  // Asserts that launching a given activity is protected by a particular
        permission by attempting to start the activity and validating that a
        S e c u r ity Ex cep tio n is thrown that mentions the permission in its error
        message .
  void a s s e r t R e a d i n g C o n t e n t U r i R e q u i r e s P e r m i s s i o n ( Uri uri , String permission )
  // Asserts that reading from the content uri requires a particular permission by
        querying the uri and ensuring a S ecu rit yE xce pti on is thrown mentioning the
        particular permission .
  void a s s e r t W r i t i n g C o n t e n t U r i R e q u i r e s P e r m i s s i o n ( Uri uri , String permission )
  // Asserts that writing to the content uri requires a particular permission by
        inserting into the uri and ensuring a Se cur ity Exc ept ion is thrown
        mentioning the particular permission .




                                                     xffox        Android Testing
Введение
                                           Введение
               Android testing framework
                                           Последовательность действий
                  Continuous Integration
                                           Специфические тесты для компонентов
                                Summary


Activity testing




  Базовый класс InstrumentationTestCase

  Тестовые классы: ActivityInstrumentationTestCase2,
  ActivityUnitTestCase, SingleLaunchActivityTestCase




                                   xffox    Android Testing
Введение
                                                         Введение
                       Android testing framework
                                                         Последовательность действий
                          Continuous Integration
                                                         Специфические тесты для компонентов
                                        Summary




ViewAsserts описывает ассерты для View, с их помощью
можно тестировать выравнивание и позицию объектов View:

static void a s s e r t B a s e l i n e A l i g n e d ( View first , View second )
// Assert that two views are aligned on their baseline , that is that their
       baselines are on the same y location .
static void a s s e r t G ro u p C o n t a i n s ( ViewGroup parent , View child )
// Assert that the specified group contains a specific child once and only once .
static void a s s e r t G r o u p I n t e g r i t y ( ViewGroup parent )
// Assert the specified group ’s integrity . The children count should be >= 0 and
       each child should be non - null .
static void a s s e r t O f f S c r e e n A b o v e ( View origin , View view )
// Assert that view is above the visible screen .
static void assertOnScreen ( View origin , View view )
// Assert that view is on the screen .
static void a s s e r t H a s S c r e e n C o o r d i n a t e s ( View origin , View view , int x , int y )
// Assert that a view has a particular x and y position on the visible screen .
// ...




                                              xffox       Android Testing
Введение
                                                                         Введение
                               Android testing framework
                                                                         Последовательность действий
                                  Continuous Integration
                                                                         Специфические тесты для компонентов
                                                Summary


Activity testing


  import com . example . helloandroid . HelloAndroid ;


  package com . example . helloandroid . test ;

  import android . test . A c t i v i t y I n s t r u m e n t a t i o n T e s t C a s e 2 ;

  public class HelloAndroidTest extends ActivityInstrumentationTestCase2 <
       HelloAndroid > {
  }


        public HelloAndroidTest () {
          super ( " com . example . helloandroid " , HelloAndroid . class ) ;
        }




                                                           xffox          Android Testing
Введение
                                                   Введение
                     Android testing framework
                                                   Последовательность действий
                        Continuous Integration
                                                   Специфические тесты для компонентов
                                      Summary


Activity testing

     @Override
     protected void setUp () throws Exception {
         super . setUp () ;
         mActivity = this . getActivity () ;
         mView = ( TextView ) mActivity . findViewById ( com . example . helloandroid . R . id .
               textview ) ;
         resourceString = mActivity . getString ( com . example . helloandroid . R . string .
               hello ) ;
     }


  Этот тест будет вызван первым, используется для проверки
  иницализации.
     public void t est Pr eco ndi tio ns () {
       assertNotNull ( mView ) ;
     }


     public void testText () {
       assertEquals ( resourceString ,( String ) mView . getText () ) ;
     }




                                         xffox      Android Testing
Введение
                                           Введение
               Android testing framework
                                           Последовательность действий
                  Continuous Integration
                                           Специфические тесты для компонентов
                                Summary


Content provider testing

  Базовый класс ProviderTestCase2

  Объект тестируемого класса можно получить через вызов
  getProvider(), но лучше использовать резолвер для работы с
  объектом, также как и обычное приложение будет его
  использовать.

  Следует тестировать URI, причем как корректные так и
  некорректные.

  Следует тестировать стандартные методы: query(), insert(),
  delete(), update(), getType() и onCreate().

  Бизнесс логика.
                                   xffox    Android Testing
Введение
                                                                  Введение
                            Android testing framework
                                                                  Последовательность действий
                               Continuous Integration
                                                                  Специфические тесты для компонентов
                                             Summary


Content provider testing



  M o c k C o n t e n t R e s o l v e r g e t M o c k C o n t e n t R e s o l v e r ()
  // Gets the M o c k C o n te n t R e s o l v e r created by this class during initialization .
  I so la t ed Context getMockContext ()
  // Gets the IsolatedContext created by this class during initialization .
  T getProvider ()
  // Returns the content provider created by this class in the setUp () method .
  static <T extends ContentProvider > ContentResolver
            n e w R e s o l v e r W i t h C o n t e n t P r o v i d e r F r o m S q l ( Context targetContext , String
            filenamePrefix , Class <T > providerClass , String authority , String
            databaseName , int databaseVersion , String sql )
  // Creates a new content provider of the same type as that passed to the test
            case class , with an authority name set to the authority parameter , and
            using an SQLite database as the underlying data source .




                                                      xffox        Android Testing
Введение
                                           Введение
               Android testing framework
                                           Последовательность действий
                  Continuous Integration
                                           Специфические тесты для компонентов
                                Summary


Service testing


  Базовый класс ServiceTestCase

  Следует тестировать функции onCreate() как реакцию на
  Context.startService() или Context.bindService().
  Функцию onDestroy() как реакцию на
  Context.stopService(), Context.unbindService(),
  stopSelf() или stopSelfResult().

  Бизнесс логика.




                                   xffox    Android Testing
Введение
                                                Введение
                    Android testing framework
                                                Последовательность действий
                       Continuous Integration
                                                Специфические тесты для компонентов
                                     Summary


Service testing

  Application getApplication ()
  // Returns the Application object in use by the service under test .
  T getService ()
  Context g etSystemContext ()
  // Returns the real system context that is saved by setUp () .
  void setApplication ( Application application )
  // Sets the application that is used during the test .
  IBinder bindService ( Intent intent )
  // Starts the service under test , in the same way as if it were started by
        Context . bindService ( Intent , ServiceConnection , flags ) with an Intent that
        identifies a service .
  void setUp ()
  // Gets the current system context and stores it .
  voi setupService ()
  // Creates the service under test and attaches all injected dependencies ( Context
        , Application ) to it .
  voi s hu td ownService ()
  // Makes the necessary calls to stop ( or unbind ) the service under test , and
        calls onDestroy () .
  void startService ( Intent intent )
  // Starts the service under test , in the same way as if it were started by
        Context . startService ( Intent ) with an Intent that identifies a service .
  void tearDown ()
  // Shuts down the service under test .




                                        xffox    Android Testing
Введение
                                         Введение
             Android testing framework
                                         Последовательность действий
                Continuous Integration
                                         Специфические тесты для компонентов
                              Summary




В итоге...




                                 xffox    Android Testing
Введение
                 Android testing framework   Введение
                    Continuous Integration   Hudson
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
             Android testing framework   Введение
                Continuous Integration   Hudson
                              Summary


Рекомендуемые требования




     Юнит тесты
     Система контроля
     версий




                                 xffox    Android Testing
Введение
               Android testing framework   Введение
                  Continuous Integration   Hudson
                                Summary


How does it work



  Один из узлов - Master - отвечает за мониторинг репозитория
  на коммиты или другие события, по которым он вызывает
  сборку и запуск тестов на подключенных к нему узлах - slaves -
  и сохранение возвращенных результатов.
  Подключенные узлы должны отличаться по конфигурации (ОС,
  железо и т.д.)




                                   xffox    Android Testing
Введение
               Android testing framework   Введение
                  Continuous Integration   Hudson
                                Summary


How does it work




  Чаще всего центральный узел предоставляет доступ к
  результатам через web-интерфейс. Плюс к этому возможны
  различные варианты нотификации (email, rss, jabber, ...).
  Существуют и другие архитектуры для Continuous Integration
  (CMake dashboard).




                                   xffox    Android Testing
Введение
                 Android testing framework   Введение
                    Continuous Integration   Hudson
                                  Summary


Outline

  1   Введение
        Юнит тестирование
        Архитектура

  2   Android testing framework
        Введение
        Последовательность действий
        Специфические тесты для компонентов

  3   Continuous Integration
        Введение
        Hudson


                                     xffox    Android Testing
Введение
             Android testing framework   Введение
                Continuous Integration   Hudson
                              Summary




Continuous Integration на базе Hudson
Hudson написан на Java

Установка очень простая:
    Скачать war-архив с сайта
    Скачать плагин android-emulator.hpi (также понадобится
    port-allocator.hpi) Помещаются в ˜/.hudson/plugins
    java -jar hudson-1.398.war
    go http://localhost:8080




                                 xffox    Android Testing
Введение
Android testing framework   Введение
   Continuous Integration   Hudson
                 Summary




                    xffox    Android Testing
Введение
Android testing framework   Введение
   Continuous Integration   Hudson
                 Summary




                    xffox    Android Testing
Введение
Android testing framework   Введение
   Continuous Integration   Hudson
                 Summary




                    xffox    Android Testing
Введение
Android testing framework   Введение
   Continuous Integration   Hudson
                 Summary




                    xffox    Android Testing
Введение
Android testing framework   Введение
   Continuous Integration   Hudson
                 Summary




                    xffox    Android Testing
Введение
              Android testing framework   Введение
                 Continuous Integration   Hudson
                               Summary




И теперь...




                                  xffox    Android Testing
Введение
              Android testing framework
                 Continuous Integration
                               Summary


Summary




 Инструментарий есть, научитесь его использовать на пользу
 себе.




                                  xffox    Android Testing
Приложение   For Further Reading



For Further Reading I



     Robert C. Martin.
     Clean Code.
     Prentice Hall.
     David J. Agans.
     Debugging
     http://developer.android.com/index.html




                               xffox   Android Testing

Mais conteúdo relacionado

Mais procurados

Тестирование ПО (лекция 2)
Тестирование ПО (лекция 2)Тестирование ПО (лекция 2)
Тестирование ПО (лекция 2)Igor Khmelnytskyy
 
Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1Technopark
 
Тестирование ПО (лекция 3)
Тестирование ПО (лекция 3)Тестирование ПО (лекция 3)
Тестирование ПО (лекция 3)Igor Khmelnytskyy
 
Управление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестированияУправление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестированияSQALab
 
Тестирование ПО (лекция 1)
Тестирование ПО (лекция 1)Тестирование ПО (лекция 1)
Тестирование ПО (лекция 1)Igor Khmelnytskyy
 
7 принципов эффективного тестирования
7 принципов эффективного тестирования7 принципов эффективного тестирования
7 принципов эффективного тестированияak-itconsulting.com
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClub QA Kostroma
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
Unit testing
Unit testingUnit testing
Unit testingISsoft
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rusMaxim Shaptala
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
 

Mais procurados (20)

Тестирование ПО (лекция 2)
Тестирование ПО (лекция 2)Тестирование ПО (лекция 2)
Тестирование ПО (лекция 2)
 
Istqb lesson 6
Istqb lesson 6Istqb lesson 6
Istqb lesson 6
 
Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1
 
Test design print
Test design printTest design print
Test design print
 
Тестирование ПО (лекция 3)
Тестирование ПО (лекция 3)Тестирование ПО (лекция 3)
Тестирование ПО (лекция 3)
 
Управление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестированияУправление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестирования
 
Тестирование ПО (лекция 1)
Тестирование ПО (лекция 1)Тестирование ПО (лекция 1)
Тестирование ПО (лекция 1)
 
Istqb lesson 1
Istqb lesson 1Istqb lesson 1
Istqb lesson 1
 
7 принципов эффективного тестирования
7 принципов эффективного тестирования7 принципов эффективного тестирования
7 принципов эффективного тестирования
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDD
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
Istqb lesson 5
Istqb lesson 5Istqb lesson 5
Istqb lesson 5
 
Unit testing
Unit testingUnit testing
Unit testing
 
Тест-дизайн "в цикле"
Тест-дизайн "в цикле"Тест-дизайн "в цикле"
Тест-дизайн "в цикле"
 
лекция4 qa
лекция4 qaлекция4 qa
лекция4 qa
 
лекция3 QA
лекция3 QAлекция3 QA
лекция3 QA
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
 
QA Лекция2
QA Лекция2QA Лекция2
QA Лекция2
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 

Destaque

[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)Evgeny Kaziak
 
[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)Evgeny Kaziak
 
Secondary education-act-1972
Secondary education-act-1972Secondary education-act-1972
Secondary education-act-1972Ritesh Vaniya
 
[JAM 1.1] Intro (Paul Malikov)
[JAM 1.1] Intro (Paul Malikov)[JAM 1.1] Intro (Paul Malikov)
[JAM 1.1] Intro (Paul Malikov)Evgeny Kaziak
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)Evgeny Kaziak
 
[JAM 1.1] Symfony (Alexei Yanochkin)
[JAM 1.1] Symfony (Alexei Yanochkin)[JAM 1.1] Symfony (Alexei Yanochkin)
[JAM 1.1] Symfony (Alexei Yanochkin)Evgeny Kaziak
 
[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)Evgeny Kaziak
 
[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)Evgeny Kaziak
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)Evgeny Kaziak
 
Bombay primary education act
Bombay primary education actBombay primary education act
Bombay primary education actRitesh Vaniya
 
Part iii sec.2 ppt.
Part iii sec.2 ppt.Part iii sec.2 ppt.
Part iii sec.2 ppt.dhtay
 
[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)Evgeny Kaziak
 
[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)Evgeny Kaziak
 
[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)
[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)
[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)Evgeny Kaziak
 
Clements World Part III, Sec 1
Clements World Part III, Sec 1Clements World Part III, Sec 1
Clements World Part III, Sec 1dhtay
 
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)Evgeny Kaziak
 
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)Evgeny Kaziak
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)Evgeny Kaziak
 

Destaque (18)

[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
[JAM 1.1] Project Managment Tools (Viktor Sidorcov)
 
[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)[JAM 1.0] Intro (Paul Malikov)
[JAM 1.0] Intro (Paul Malikov)
 
Secondary education-act-1972
Secondary education-act-1972Secondary education-act-1972
Secondary education-act-1972
 
[JAM 1.1] Intro (Paul Malikov)
[JAM 1.1] Intro (Paul Malikov)[JAM 1.1] Intro (Paul Malikov)
[JAM 1.1] Intro (Paul Malikov)
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
 
[JAM 1.1] Symfony (Alexei Yanochkin)
[JAM 1.1] Symfony (Alexei Yanochkin)[JAM 1.1] Symfony (Alexei Yanochkin)
[JAM 1.1] Symfony (Alexei Yanochkin)
 
[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)[JAM 1.2] Intro (Paul Malikov)
[JAM 1.2] Intro (Paul Malikov)
 
[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)[JAM 1.1] Geo Champs (Mashpit Team)
[JAM 1.1] Geo Champs (Mashpit Team)
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
 
Bombay primary education act
Bombay primary education actBombay primary education act
Bombay primary education act
 
Part iii sec.2 ppt.
Part iii sec.2 ppt.Part iii sec.2 ppt.
Part iii sec.2 ppt.
 
[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)
 
[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)[JAM 1.2] HTML5 (Alexei Yanochkin)
[JAM 1.2] HTML5 (Alexei Yanochkin)
 
[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)
[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)
[JAM 1.0] Human Interface Guidelines (Evgeny Kaziak)
 
Clements World Part III, Sec 1
Clements World Part III, Sec 1Clements World Part III, Sec 1
Clements World Part III, Sec 1
 
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
 
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
[JAM 1.2] Mobile Gamedesign (Boris Zapolsky)
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
 

Semelhante a [JAM 1.2] Testing in Android (Dzmitry Ivashnev)

Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDDIosif Itkin
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)Yandex
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on AndroidGDG Odessa
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Magneta AI
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в AgileSQALab
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with SeleniumSergey Shvets
 
Unit tests Python examples
Unit tests Python examplesUnit tests Python examples
Unit tests Python examplesssuserd327fe1
 
Автоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюSQALab
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileKairat Yussupov
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQAFest
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииSQALab
 
5 колчинская
5 колчинская 5 колчинская
5 колчинская qasib
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыSQALab
 

Semelhante a [JAM 1.2] Testing in Android (Dzmitry Ivashnev) (20)

Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDD
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on Android
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
Unit tests Python examples
Unit tests Python examplesUnit tests Python examples
Unit tests Python examples
 
Автоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решению
 
Ttd in xcode
Ttd in xcodeTtd in xcode
Ttd in xcode
 
Непрерывная интеграция
Непрерывная интеграцияНепрерывная интеграция
Непрерывная интеграция
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
5 колчинская
5 колчинская 5 колчинская
5 колчинская
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
 

[JAM 1.2] Testing in Android (Dzmitry Ivashnev)

  • 1. Введение Android testing framework Continuous Integration Summary Тестирование приложений на платформе Android Ивашнёв Дмитрий email: 0xff0x666@gmail.com skype: oxffdx 9 апреля 2011 г. xffox Android Testing
  • 2. Введение Android testing framework Continuous Integration Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 3. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 4. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Подход к тестированию Автоматическое Тесты как часть кода Юнит тестирование xffox Android Testing
  • 5. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Подход к тестированию Автоматическое Тесты как часть кода Юнит тестирование xffox Android Testing
  • 6. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Unit testing Проверка на корректность отдельных модулей Инструментарий: Test case Assertions Mock objects Test case runner xffox Android Testing
  • 7. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Unit testing Проверка на корректность отдельных модулей Инструментарий: Test case Assertions Mock objects Test case runner xffox Android Testing
  • 8. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Unit testing Проверка на корректность отдельных модулей Инструментарий: Test case Assertions Mock objects Test case runner xffox Android Testing
  • 9. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Unit testing Проверка на корректность отдельных модулей Инструментарий: Test case Assertions Mock objects Test case runner xffox Android Testing
  • 10. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 11. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary What can I do TestCase - базовый класс, от которого наследуются тестовые классы. В тестирующем фреймворке могут быть классы, расширяющие базовый функционал. В тестовый класс добавляются методы, содержащие тестирующий код. Методы, начинающиеся с "test"автоматически распознаются как тестовые методы, которые будут вызваны при тестировании. xffox Android Testing
  • 12. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary What can I do В методы setUp() и tearDown() добавляется код, который будет вызываться перед и после каждого теста соответственно (fixture). Для проверки корректности работы используются ассерты (assertEquals(), assertFalse(), assertNull(), ...). Тестирующий фреймворк может содержать дополнительные ассерты. xffox Android Testing
  • 13. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Пример чистого Junit public class CoverageTest extends TestCase { public void testBounding () { ArrayList < Circle > circles = new ArrayList < Circle >() ; circles . add ( new Circle ( new Point (.0 , .0) , 2.0) ) ; Coverage coverage = new Coverage ( circles ) ; Rectangle boundingRect = coverage . g e t B o u n d i n g R e c t a n g l e () ; assertEquals ( boundingRect .x , -2.0) ; assertEquals ( boundingRect .y , 2.0) ; assertEquals ( boundingRect . x + boundingRect . width , 2.0) ; assertEquals ( boundingRect . y - boundingRect . height , -2.0) ; } public void testIntersection () { ArrayList < Circle > circles = new ArrayList < Circle >() ; circles . add ( new Circle ( new Point (.0 , .0) , 2.0) ) ; Coverage coverage = new Coverage ( circles ) ; assertTrue ( coverage . isInIntersection ( new Point (.0 , .0) ) ) ; } } xffox Android Testing
  • 14. Введение Android testing framework Юнит тестирование Continuous Integration Архитектура Summary Какими должны быть тесты F.I.R.S.T. (из Clean Code) Быстрые (Fast) - если тесты будут медленными будет возникать желание запускать их реже. Независимые (Independent) - один тест не должен влиять на исход другого. Повторямые (Repeatable) - повторный запуск тестов должен быть возможен в любом окружении и должен возвращать одинаковый результат. Самодостаточные (Self-Validating) - тесты либо проходят либо нет, не нужны дополнительные действия для установления результата. Своевременные (Timely) - при несвоевременном написании тестов могут возникнуть проблемы с их интеграцией так как код мог не проектироваться с учетом его тестируемости. xffox Android Testing
  • 15.
  • 16. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 17. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Состав Основан на JUnit (версия 3) Специфические тесты для компонентов (*TestCase классы, asserts, mocks) Упаковывается в пакет как и приложение Допонительные утилиты (monkeyrunner - API для тестирования на python; Monkey:)) xffox Android Testing
  • 18. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 19. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Eclipse New->Project->Android->Android Test Project xffox Android Testing
  • 20. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Eclipse Test Project Name. Test Target: An existing Android project, или нажать Browse и выбрать нужный проект. Build Target. Application name. Package name. Нажать Finish. xffox Android Testing
  • 21. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Eclipse xffox Android Testing
  • 22. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Eclipse xffox Android Testing
  • 23. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Other IDEs $ android create test-project -m <main_path> -n <project_name> -p <test_path> $ ant install $ adb shell am instrument -w <test_package_name>/<runner_class> runner_class обычно InstrumentationTestRunner xffox Android Testing
  • 24. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 25. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary AndroidTestCase Базовый класс TestCase Предоставляет доступ к Context и содержит ассерты для тестирования прав доступа Context getContext () void setContext ( Context context ) void a s s e r t A c t i v i t y R e q u i r e s P e r m i s s i o n ( String packageName , String className , String permission ) // Asserts that launching a given activity is protected by a particular permission by attempting to start the activity and validating that a S e c u r ity Ex cep tio n is thrown that mentions the permission in its error message . void a s s e r t R e a d i n g C o n t e n t U r i R e q u i r e s P e r m i s s i o n ( Uri uri , String permission ) // Asserts that reading from the content uri requires a particular permission by querying the uri and ensuring a S ecu rit yE xce pti on is thrown mentioning the particular permission . void a s s e r t W r i t i n g C o n t e n t U r i R e q u i r e s P e r m i s s i o n ( Uri uri , String permission ) // Asserts that writing to the content uri requires a particular permission by inserting into the uri and ensuring a Se cur ity Exc ept ion is thrown mentioning the particular permission . xffox Android Testing
  • 26. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Activity testing Базовый класс InstrumentationTestCase Тестовые классы: ActivityInstrumentationTestCase2, ActivityUnitTestCase, SingleLaunchActivityTestCase xffox Android Testing
  • 27. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary ViewAsserts описывает ассерты для View, с их помощью можно тестировать выравнивание и позицию объектов View: static void a s s e r t B a s e l i n e A l i g n e d ( View first , View second ) // Assert that two views are aligned on their baseline , that is that their baselines are on the same y location . static void a s s e r t G ro u p C o n t a i n s ( ViewGroup parent , View child ) // Assert that the specified group contains a specific child once and only once . static void a s s e r t G r o u p I n t e g r i t y ( ViewGroup parent ) // Assert the specified group ’s integrity . The children count should be >= 0 and each child should be non - null . static void a s s e r t O f f S c r e e n A b o v e ( View origin , View view ) // Assert that view is above the visible screen . static void assertOnScreen ( View origin , View view ) // Assert that view is on the screen . static void a s s e r t H a s S c r e e n C o o r d i n a t e s ( View origin , View view , int x , int y ) // Assert that a view has a particular x and y position on the visible screen . // ... xffox Android Testing
  • 28. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Activity testing import com . example . helloandroid . HelloAndroid ; package com . example . helloandroid . test ; import android . test . A c t i v i t y I n s t r u m e n t a t i o n T e s t C a s e 2 ; public class HelloAndroidTest extends ActivityInstrumentationTestCase2 < HelloAndroid > { } public HelloAndroidTest () { super ( " com . example . helloandroid " , HelloAndroid . class ) ; } xffox Android Testing
  • 29. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Activity testing @Override protected void setUp () throws Exception { super . setUp () ; mActivity = this . getActivity () ; mView = ( TextView ) mActivity . findViewById ( com . example . helloandroid . R . id . textview ) ; resourceString = mActivity . getString ( com . example . helloandroid . R . string . hello ) ; } Этот тест будет вызван первым, используется для проверки иницализации. public void t est Pr eco ndi tio ns () { assertNotNull ( mView ) ; } public void testText () { assertEquals ( resourceString ,( String ) mView . getText () ) ; } xffox Android Testing
  • 30. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Content provider testing Базовый класс ProviderTestCase2 Объект тестируемого класса можно получить через вызов getProvider(), но лучше использовать резолвер для работы с объектом, также как и обычное приложение будет его использовать. Следует тестировать URI, причем как корректные так и некорректные. Следует тестировать стандартные методы: query(), insert(), delete(), update(), getType() и onCreate(). Бизнесс логика. xffox Android Testing
  • 31. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Content provider testing M o c k C o n t e n t R e s o l v e r g e t M o c k C o n t e n t R e s o l v e r () // Gets the M o c k C o n te n t R e s o l v e r created by this class during initialization . I so la t ed Context getMockContext () // Gets the IsolatedContext created by this class during initialization . T getProvider () // Returns the content provider created by this class in the setUp () method . static <T extends ContentProvider > ContentResolver n e w R e s o l v e r W i t h C o n t e n t P r o v i d e r F r o m S q l ( Context targetContext , String filenamePrefix , Class <T > providerClass , String authority , String databaseName , int databaseVersion , String sql ) // Creates a new content provider of the same type as that passed to the test case class , with an authority name set to the authority parameter , and using an SQLite database as the underlying data source . xffox Android Testing
  • 32. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Service testing Базовый класс ServiceTestCase Следует тестировать функции onCreate() как реакцию на Context.startService() или Context.bindService(). Функцию onDestroy() как реакцию на Context.stopService(), Context.unbindService(), stopSelf() или stopSelfResult(). Бизнесс логика. xffox Android Testing
  • 33. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary Service testing Application getApplication () // Returns the Application object in use by the service under test . T getService () Context g etSystemContext () // Returns the real system context that is saved by setUp () . void setApplication ( Application application ) // Sets the application that is used during the test . IBinder bindService ( Intent intent ) // Starts the service under test , in the same way as if it were started by Context . bindService ( Intent , ServiceConnection , flags ) with an Intent that identifies a service . void setUp () // Gets the current system context and stores it . voi setupService () // Creates the service under test and attaches all injected dependencies ( Context , Application ) to it . voi s hu td ownService () // Makes the necessary calls to stop ( or unbind ) the service under test , and calls onDestroy () . void startService ( Intent intent ) // Starts the service under test , in the same way as if it were started by Context . startService ( Intent ) with an Intent that identifies a service . void tearDown () // Shuts down the service under test . xffox Android Testing
  • 34. Введение Введение Android testing framework Последовательность действий Continuous Integration Специфические тесты для компонентов Summary В итоге... xffox Android Testing
  • 35.
  • 36. Введение Android testing framework Введение Continuous Integration Hudson Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 37. Введение Android testing framework Введение Continuous Integration Hudson Summary Рекомендуемые требования Юнит тесты Система контроля версий xffox Android Testing
  • 38. Введение Android testing framework Введение Continuous Integration Hudson Summary How does it work Один из узлов - Master - отвечает за мониторинг репозитория на коммиты или другие события, по которым он вызывает сборку и запуск тестов на подключенных к нему узлах - slaves - и сохранение возвращенных результатов. Подключенные узлы должны отличаться по конфигурации (ОС, железо и т.д.) xffox Android Testing
  • 39. Введение Android testing framework Введение Continuous Integration Hudson Summary How does it work Чаще всего центральный узел предоставляет доступ к результатам через web-интерфейс. Плюс к этому возможны различные варианты нотификации (email, rss, jabber, ...). Существуют и другие архитектуры для Continuous Integration (CMake dashboard). xffox Android Testing
  • 40. Введение Android testing framework Введение Continuous Integration Hudson Summary Outline 1 Введение Юнит тестирование Архитектура 2 Android testing framework Введение Последовательность действий Специфические тесты для компонентов 3 Continuous Integration Введение Hudson xffox Android Testing
  • 41. Введение Android testing framework Введение Continuous Integration Hudson Summary Continuous Integration на базе Hudson Hudson написан на Java Установка очень простая: Скачать war-архив с сайта Скачать плагин android-emulator.hpi (также понадобится port-allocator.hpi) Помещаются в ˜/.hudson/plugins java -jar hudson-1.398.war go http://localhost:8080 xffox Android Testing
  • 42. Введение Android testing framework Введение Continuous Integration Hudson Summary xffox Android Testing
  • 43. Введение Android testing framework Введение Continuous Integration Hudson Summary xffox Android Testing
  • 44. Введение Android testing framework Введение Continuous Integration Hudson Summary xffox Android Testing
  • 45. Введение Android testing framework Введение Continuous Integration Hudson Summary xffox Android Testing
  • 46. Введение Android testing framework Введение Continuous Integration Hudson Summary xffox Android Testing
  • 47. Введение Android testing framework Введение Continuous Integration Hudson Summary И теперь... xffox Android Testing
  • 48.
  • 49.
  • 50. Введение Android testing framework Continuous Integration Summary Summary Инструментарий есть, научитесь его использовать на пользу себе. xffox Android Testing
  • 51. Приложение For Further Reading For Further Reading I Robert C. Martin. Clean Code. Prentice Hall. David J. Agans. Debugging http://developer.android.com/index.html xffox Android Testing