T.M. SoftStudio

feci quod potui, faciant meliora potentes

Купить полную версию книги "Среда разработки Eclipse 4: Руководство разработчика"

Отладка, тестирование и рефакторинг кода

Автоматическое тестирование UI-интерфейса

SWTBot

Проект SWTBot (http://eclipse.org/swtbot/) предоставляет Java-инструменты тестирования UI-интерфейса SWT приложений, Eclipse-плагинов и RCP-приложений.

Все SWTBot тесты выполняются в не-UI-потоке, в отличие от PDE JUnit тестов, для предотвращения блокировки, и отправляют события в UI-поток.

Для создания тестов SWTBot проект предоставляет программный интерфейс, основным классом которого является класс org.eclipse.swtbot.swt.finder.SWTBot.

В основе SWTBot теста лежит идея поиска Widget-компонентов GUI-интерфейса с последующей имитацией действий пользователя над ними.

Методы класса SWTBot обеспечивают поиск:

  • Активный Shell-компонент.

  • Кнопки Button с типом SWT.ARROW и определенными свойствами id, label или tooltip,

  • Browser-компонента с определенными свойствами id или label,

  • Кнопки Button с типом SWT.PUSH и определенными свойствами mnemonicText, id, label или tooltip,

  • CCombo-компонента с определенными свойствами text, id или label,

  • Кнопки Button с типом SWT.CHECK и определенными свойствами mnemonicText, id, label или tooltip,

  • CLabel-компонента с определенными свойствами mnemonicText или id,

  • Combo-компонента с определенными свойствами text, id или label,

  • CTabItem-компонента с определенными свойствами mnemonicText или id,

  • DateTime-компонента с определенными свойствами id или label,

  • ExpandBar-компонента с определенными свойствами id или label,

  • Display-объекта.

  • Control-компонента с фокусом в данный момент.

  • Label-компонента с определенными свойствами mnemonicText или id,

  • Link-компонента с определенными свойствами mnemonicText или id,

  • List-компонента с определенными свойствами id или label,

  • MenuItem-компонента с определенными свойствами text или id,

  • Кнопки Button с типом SWT.RADIO и определенными свойствами mnemonicText, id, label или tooltip,

  • Scale-компонента с определенными свойствами text, id, label или tooltip,

  • Shell-компонент с определенными свойствами text или id,

  • Slider-компонент с определенными свойствами text, id, label или tooltip,

  • Spinner-компонент с определенными свойствами text, id, label или tooltip,

  • StyledText-компонент с определенными свойствами text, id или label,

  • TabItem-компонент с определенными свойствами mnemonicText или id,

  • Table-компонент с определенными свойствами id или label,

  • Text-компонент с определенными свойствами text, id, label, message или tooltip,

  • Кнопку Button с типом SWT.TOGGLE и определенными свойствами mnemonicText, id, label или tooltip,

  • ToolItem-компонент с определенными свойствами mnemonicText, id или tooltip,

  • TrayItem-компонент с определенным свойством tooltip,

  • Tree-компонент с определенными свойствами id или label.

После поиска и получения SWTBot-объектов, которые обертывают Widget-компоненты, их методы позволяют имитировать действия пользователя – открытие/закрытие окна, нажатие кнопок, управление браузером, выбор элементов списка, дерева и таблицы, выбор флажка, выбор даты, открытие/закрытие меню, выбор элемента меню, открытие ссылки, перемещение бегунка, открытие вкладки, ввод текста и др.

Класс SWTBot также обеспечивает сохранение скриншота в файл, получение объекта org.eclipse.swtbot.swt.finder.finders.Finder для группового поиска Widget-компонентов, остановку потока на указанный промежуток времени, ожидание выполнения условия и групповой поиск.

Класс SWTFormsBot расширяет класс SWTBot и добавляет поиск компонентов Hyperlink и ImageHyperlink с определенными свойствами mnemonicText или id.

Класс SWTWorkbenchBot также расширяет класс SWTBot и добавляет поиск компонентов:

  • Редактора IEditorReference – активного в данный момент, с определенным идентификатором или заголовком,

  • Перспективы IPerspectiveDescriptor – активной в данный момент, по умолчанию, с определенными свойствами id или label,

  • Представления IViewReference – активного в данный момент, с определенным идентификатором или заголовком.

Скорость выполнения SWTBot тестов регулируется с помощью свойства SWTBotPreferences.PLAYBACK_DELAY (по умолчанию 0).

Время ожидания ответа UI-интерфейса регулируется с помощью свойства SWTBotPreferences.TIMEOUT (по умолчанию 5000 миллисекунд).

Для установки SWTBot-инструментов откроем среду Eclipse и в меню Help выберем команду Install New Software, в поле Work with: введем адрес http://download.eclipse.org/technology/swtbot/releases/latest/ и нажмем кнопку Next.

После установки плагинов SWTBot и перезапуска среды Eclipse создадим проект простого Е4-приложения (см. Создание RCP-приложений | Создание Eclipse 4 RCP-приложения).

Для создания SWTBot-теста в меню File среды Eclipse выберем команду New | Other | Plug-in Development | Plug-in Project, нажмем кнопку Next, введем имя проекта com.swtbot, выберем переключатель Eclipse version:, нажмем кнопку Next, уберем выбор всех флажков и переключателя Rich Client Application и нажмем кнопку Finish.

В редакторе Plug-in Manifest Editor откроем вкладку Dependencies и кнопкой Add добавим зависимость от плагинов:

  • org.eclipse.swtbot.eclipse.finder

  • org.eclipse.swtbot.junit4_x

  • org.hamcrest.core

  • org.apache.commons.collections

  • org.junit (4.х)

  • org.apache.log4j

  • org.eclipse.ui

Создадим класс SWTBotTest со следующим кодом:

import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;

import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;

import org.junit.AfterClass;

import org.junit.BeforeClass;

import org.junit.Test;

import org.junit.runner.RunWith;

@RunWith(SWTBotJunit4ClassRunner.class)

public class SWTBotTest {

private static SWTWorkbenchBot bot;

@BeforeClass

public static void beforeClass() throws Exception {

bot = new SWTWorkbenchBot();

}

@Test

public void testUI() throws Exception {

bot.menu("Open").click();

//bot.menu("Save").click();

bot.menu("About").click();

bot.table().select(1);

//bot.activeView().close();

//bot.menu("Quit").click();

}

@AfterClass

public static void sleep() {

bot.sleep(2000);

}}

В окне Project Explorer нажмем правой кнопкой мышки на узле файла SWTBotTest.java и в контекстном меню выберем Run As | Run Configurations.

В разделе SWTBot Test создадим новую конфигурацию (рис. 2.24).

Рис. 2.24. Конфигурация запуска SWTBot-теста

Нажмем кнопку Run – в результате будет запущено E4-приложение, над GUI-интерфейсом которого будут проделаны указанные в классе SWTBotTest действия.


Автоматическое тестирование UI-интерфейса. Jubula