}
Метод log In добре показує особливості реалізації веб-клієнта в даному проекті. У ньому можна виділити кілька основних елементів, також присутніх у всіх інших методах веб-клієнта:
- Виклик методу post. Даний метод формує HTTP POST запит з тілом, переданим в другому параметрі, і відправляє його за адресою веб-методу, зазначеного першим параметром. Лістинг цього методу буде приведений далі за текстом.
- Використання об'єкта Json Helper для формування тіла запиту. Решта методів спочатку використовую кілька викликів методу Json Helper.add для ініціалізації об'єкту, а потім приводять його до необхідного типу викликом методу to String Entity, також наведеного нижче. Винятком є ??метод upload Picture, відразу використовує об'єкт Byte Array Entity, оскільки тілом запиту для цього методу не є JSON-об'єкт.
- Отримання з HTTP-відповіді потокового JSON-парсеру, за допомогою статичного методу Json Helper. Get Reader For Response.
- Послідовне вилучення даних з HTTP-потоку за допомогою раніше отриманого JSON-парсеру.
Лістинг методу post:
HttpResponse post (String method, HttpEntity entity) IOException {request=new HttpPost (baseUrl + method) ;. setEntity (entity) ;. setHeader ( Accept raquo ;, application/json ) ; (entity instanceof StringEntity) {.setHeader ( Content-type ,
application/json; charset=UTF - 8 );
}. setHeader ( Authorization raquo ;, authHeader); client.execute (request);
}
У методі здійснюється об'єднання базової адреси веб API з ім'ям конкретного веб-методу, створення нового екземпляра HTTP POST запиту, установка його тіла, а також HTTP-заголовків, які містять тип вмісту, тип відповіді і токен авторизації. В якості значення, що повертається виступає об'єкт типу Http Response, що представляє собою HTTP-відповідь на створений HTTP POST запит.
Логіка методів to String Entity і get Reader For Response вельми прямолінійна, проте добре ілюструє типові способи конвертації даних при взаємодії з REST API в Android-додатках:
public StringEntity toStringEntity () {{new StringEntity (.toString (), HTTP.UTF_8);
} catch (UnsupportedEncodingException e) {.printStackTrace ();
} null;
} static JsonReader getReaderForResponse (response) {(response!=null) {{new JsonReader (InputStreamReader (.getEntity (). getContent ()));
} catch (IOException e) {.printStackTrace ();
}
}
return null;}
5. Програма та методика випробувань
Система тестування Android надає архітектуру і потужні інструменти для тестування всіх частин програми на всіх рівнях розробки (від окремої частини програми до програми в цілому). Система тестування включає в себе такі особливості:
. Набори тестів Android основаних на JUnit. Для тестування класу, який не використовує Android API, можна використовувати звичайні тести з JUnit, або використовувати розширення Android JUnit, для тестування Android компонентів.
. Android розширення JUnit надають компоненти-орієнтовані класи тестів. Ці класи надають допоміжні методи для створення mock-об'єктів і методів, які допомагають керувати життєвим циклом компонентів.
. Набори тестів містяться в тестових пакетах, які схожі на основні пакети програм
. Інструменти SDK для створення та тестування доступні у вигляді плагінів до IDE, а також у вигляді консольних додатків. Ці інструменти отримують інформацію з проекту тестованого програми і використовують її для автоматичного створення build-файлів, файлу маніфесту і структури каталогів для тестового пакета.
. SDK також надає monkeyrunner - API тестування пристроїв з програмами на Python, і UI/Application Exerciser Monkey (консольний інструмент для стрес-тестування користувальницьких інтерфейсів шляхом відправки псевдовипадкових подій на пристрій.
У процесі роботи над проектом компанія-замовник вирішила відмовитися від повноцінного тестування на догоду прискоренню процесу розробки, тому тестування даного проекту є виключно функціональним.
В основному тестування проводилося на смартфоні Samsung Galaxy S II з операційною системою Android 4.1.2 і дозволом екрану в 800х480 пікселів. Смартфон володіє усіма особливостями, необхідними для повноцінної роботи всіх можливостей додатки, тому додатково проводилися тести на інших пристроях. У деяких тестах використов...