Учебник: доступ к пулу данных из теста JUnit


Цели:

Создание пула данных из примера тестового приложения на платформе Eclipse TPTP и организация доступа к этому пулу данных.

Необходимое время

1 час

Перед тем как начать

Перед началом изучения этого учебника необходимо:

  1. Установить Eclipse и платформу TPTP.
  2. Получить общее представление о тестировании JUnit. Дополнительные сведения о тестировании JUnit приведены в разделе www.junit.org.
  3. Настроить и запустить контроллер агента для текущей версии TPTP. Дополнительные сведения приведены в разделе Начало работы с контроллером агента.


Описание

В этом учебнике приведен пример создания и тестирования приложения MyShoppingCart. На базе платформы Eclipse TPTP можно разработать тесты JUnit и создать пул данных для подачи данных в среду тестирования.

В этом учебнике подробно описаны следующие процедуры:

  1. Создание пользовательского приложения
  2. Настройка комплекта тестов TPTP
  3. Создание пула данных и инициализация данных теста
  4. Привязка тестовых наборов к пулу данных

Создание пользовательского приложения


В результате выполнения этой процедуры будет создан класс MyShoppingCart. В последующих процедурах для этого класса будет создана среда тестирования на платформе Eclipse TPTP.
  1. Создание проекта Java Eclipse.
    • Откройте меню Файл и выберите Файл > Создать > Проект.... Появится окно Новый проект.
    • Выберите Проект Java в списке мастеров и нажмите кнопку Далее. Будет открыта страница Создать проект Java.
    • Укажите datapoolExample в качестве имени проекта и нажмите кнопку Готово. Проект datapoolExample будет показан в панели Навигатор.
  2. Создайте класс MyShoppingCart.
    • Щелкните правой кнопкой на проекте datapoolExample и выберите Создать > Класс. Появится окно Создать класс Java.
    • Введите MyShoppingCart в поле Имя.
    • Снимите отметку с опции создания метода main public static void main(String[] args).
    • Нажмите кнопку Готово. Файл MyShoppingCart.java будет показан в редакторе Java.
    • Введите следующий исходный код MyShoppingCart:
      import java.util.*;
      public class MyShoppingCart {
      
      	public Hashtable myFlowers;
      	
      	public MyShoppingCart() {
      	    
      		myFlowers = new Hashtable();
      		myFlowers.put("Orchid", new Double(5.99));
      		myFlowers.put("Tulip", new Double(1.99));
      		myFlowers.put("White Poinsee", new Double(6.99));
      		myFlowers.put("White Rose", new Double(9.99));
      		myFlowers.put("Geraniums", new Double(4.99));		
      	}
      	
      	public double itemCost(String itemName, int itemQuantity)
      	{
      	     Double price = (Double)myFlowers.get(itemName);
      		
      	     if (price != null) {
      	    	 return price.doubleValue()*itemQuantity;
      	     }
      	     
      	     return -1;	    	 	    	 	     		
      	}
      }
    • Сохраните файл MyShoppingCart.java. Откройте меню Файл и выберите Файл > Сохранить.

Настройка комплекта тестов TPTP


В результате выполнения этой процедуры будет создан комплект тестов для класса MyShoppingCart. На базе платформы Eclipse TPTP будет разработан тест JUnit для метода itemCost.
  1. Откройте проекцию Тестирование.
    • В меню Файл выберите Окно > Открыть проекцию > Другая.
    • Выберите Тестирование и нажмите кнопку OK. Появится окно Навигатора тестов.
  2. Создайте тест JUnit TPTP.
    • В Навигаторе тестов щелкните правой кнопкой мыши на проекте datapoolExample и выберите Создать > Элемент теста...
    • В окне Элемент теста выберите Тест JUnit TPTP и нажмите кнопку Далее. Появится окно Новый тестовый набор, в котором нужно будет добавить библиотеки JUnit. Нажмите кнопку Да для добавления библиотек JUnit.
    • На странице Исходный код нового теста JUnit введите shoppingCartTest_src в поле Имя. В разделе Выберите способ изменения функции теста выберите опцию В редакторе теста (она выбрана по умолчанию).
    • Нажмите кнопку Готово. Появится окно редактора теста JUnit TPTP, в котором будет показан комплект тестов shoppingCartTest_src. На вкладке Обзор будут показаны описание теста, информация об исходном коде и список методов тестирования. К настоящему моменту не определен ни один метод тестирования. В процедуре, изложенной в данном учебнике, редактор теста JUnit TPTP будет создавать заготовки методов, и поэтому нужно снять отметку с флага Реализовать функцию теста в виде кода в разделе Информация об исходном коде. Дополнительные сведения приведены в разделе Редактор комплектов тестов JUnit.
  3. Добавьте методы testItemCost и testShoppingCartConstructor.
    • Нажмите кнопку Добавить на вкладке Методы тестирования. Будет показано имя по умолчанию для теста.
    • Добавьте метод testItemCost. В поле Имя укажите значение testItemCost для нового теста. В поле описания введите Тест метода MyShoppingCart.itemCost(String, int).
    • Добавьте метод testShoppingCartConstructor. Нажмите кнопку Добавить на вкладке Методы тестирования. В поле Имя укажите testShoppingCartConstructor для нового теста. В поле описания введите Тест конструктора MyShoppingCart.
  4. Настройте функцию выполнения теста.
    • Добавьте цикл выполнения теста. На вкладке Алгоритм выберите Добавить... > Цикл. В поле Имя укажите Loop_MyShoppingCart. В поле Число итераций укажите 1 (значение по умолчанию ).
    • Добавьте вызов testShoppingCartConstructor. Выберите Loop_MyShoppingCart и нажмите Добавить... > Вызов. Появится окно Вызов теста. Выберите testShoppingCartConstructor и нажмите кнопку ОК.
    • Добавьте вызов testItemCost. Выберите Loop_MyShoppingCart и нажмите Добавить... > Вызов. Появится окно Вызов теста. Выберите testItemCost и нажмите кнопку OK.
    • Сохраните комплект тестов. В меню Файл выберите Файл > Сохранить.

      Примечание: при выполнении команды Сохранить редактор теста JUnit TPTP создаст заготовки методов тестирования в файле shoppingCartTest_src.java.
  5. Введите код сгенерированных методов тестирования JUnit - testShoppingCartConstructor и testItemCost.
    • Откройте проекцию Java. Откройте меню Файл и выберите Окно > Открыть проекцию > Другая... > Java.
    • Откройте файл shoppingCartTest_src.java. Для этого нужно открыть папку проекта datapoolExample в Навигаторе и дважды щелкните на файле shoppingCartTest_src.java. Появится окно редактора Java, в котором будет показан текст shoppingCartTest_src.java, включая код настройки и выполнения комплекта тестов, а также заготовки методов testShoppingCartConstructor и testItemCost.
    • Введите следующий код для метода testShoppingCartConstructor.
      public void testShoppingCartConstructor()
      throws Exception
      {
      	MyShoppingCart cart = new MyShoppingCart();
      	Double priceOrchid = (Double)cart.myFlowers.get("Orchid");
      	Double priceTulip = (Double)cart.myFlowers.get("Tulip");
      	
      	assertTrue(priceOrchid.doubleValue() == 5.99);
      	assertTrue(priceTulip.doubleValue() == 1.99);
      }
    • Введите следующий код метода testItemCost.
      public void testItemCost()
      throws Exception
      {
      	MyShoppingCart cart = new MyShoppingCart();
      	double priceForTwo = cart.itemCost("Orchid", 2);
      	
      	assertTrue(priceForTwo == 11.98);
      }
    • Сохраните файл shoppingCartTest_src.java. Откройте меню Файл и выберите Файл > Сохранить.
  6. Откройте проекцию Тестирование и создайте развертывание. Инструкции приведены в разделе Создание развертывания теста.
  7. Выполните тест в новом развертывании.
    • В Навигаторе тестов щелкните правой кнопкой мыши на комплекте shoppingCartTest_src и выберите Выполнить как > Выполнить.... Появится окно Конфигурация выполнения.
    • В панели Конфигурации выберите Тест и нажмите кнопку Создать.
    • В левой панели окна Конфигурация выполнения (Выберите тест для выполнения) разверните datapoolExample и выберите комплект тестов shoppingCartTest_src.
    • В правой панели окна Конфигурация выполнения выберите только что созданное развертывание.
    • На вкладке Протоколы теста снимите отметку с поля Использовать значения по умолчанию и выберите папку проекта datapoolExample в качестве расположения.
    • Нажмите кнопку Выполнить для запуска теста.
  8. Дважды щелкните на протоколе теста shoppingCartTest_src в окне Навигатора тестов. Будет показано содержимое протокола теста shoppingCartTest_src. Для просмотра сведений о тесте перейдите на вкладку События. Должны быть показаны следующие события: начало выполнения комплекта тестов, запуск Loop_MyShoppingCart, запуск теста, вердикт теста, завершение теста, запуск второго теста, вердикт второго теста, завершение второго теста, завершение цикла, вердикт комплекта тестов и завершение комплекта тестов.

Создание пула данных и инициализация данных теста


В ходе этой процедуры будет создан простой пул данных для хранения данных теста. С помощью редактора пулов данных будут определены структурные элементы пула данных, включая переменные (столбцы), записи (строки) и классы эквивалентности (группы взаимосвязанных записей).
  1. Создайте файл CSV с данными теста. Из большинства электронных таблиц и баз данных можно экспортировать данные в формат CSV. Однако в этом учебнике их нужно будет ввести вручную.
    • Введите следующую информацию в текстовом редакторе.
      ,ModelNumber::String,Description::String,Price::Double
      flowers,F0001,Orchid,5.99
      flowers,F0002,Tulip,1.99
      flowers,F0003,White Poinsee,6.99
      flowers,F0004,White Rose,9.99
      flowers,F0005,Geraniums,4.99
    • Сохраните файл с именем flowerData.csv во временном внешнем каталоге.
  2. Откройте проекцию Тестирование в Eclipse.
    • В меню Файл выберите Окно > Открыть проекцию > Другая.
    • Выберите Тестирование и нажмите кнопку OK. Появится окно Навигатора тестов.
  3. В Навигаторе тестов щелкните правой кнопкой мыши на проекте и выберите Создать > Элемент теста.... Появится окно Новый элемент теста.
  4. В списке Мастеры разверните папку Ресурсы теста и выберите Пул данных.
  5. Нажмите кнопку Далее. Появится окно Новый пул данных.
  6. Укажите имя проекта пула данных и имя пула данных. Выберите проект datapoolExample в списке проектов. Укажите значение shoppingCartDatapool в поле Имя. Нажмите кнопку Далее для продолжения, а затем опять кнопку Далее для перехода на страницу импорта файла CSV.
  7. Импортируйте файл flowerData.csv.
    • Нажмите кнопку Обзор рядом с полем Файл CSV и найдите файл flowerData.csv.
    • Отметьте поле Первая строка содержит имена переменных и возможные типы. В первой строке файла flowerData.csv находятся типы и заголовки столбцов.
    • Отметьте поле Первый столбец содержит имена классов эквивалентности. Классы эквивалентности применяются для группировки взаимосвязанных данных. В первом столбце файла flowerData.csv указан единственный класс эквивалентности (flowers).
  8. Нажмите Готово. Если указанный начальный размер пула данных несовместим с размером файла CSV, появится еще одно окно. Нажмите кнопку Да, чтобы увеличить пул данных до размера файла CSV. Если вы нажмете кнопку Нет, будет сохранен указанный начальный размер пула данных, что может привести к неполному импорту данных из файла CSV. Появится окно редактора пула данных, в котором будут показаны данные первого класса эквивалентности - flowers.

    Подробные сведения о создании пулов данных приведены в разделе Создание пула данных.


Привязка тестовых наборов к пулу данных


Эта процедура позволяет заменить явно указанные исходные данные ссылками на столбцы пула данных с помощью API пула данных.

Добавление библиотек API пула данных

Для применения API пула данных нужны библиотеки TPTP и Eclipse Modeling Framework (EMF). Эта процедура позволяет добавить библиотеки в путь компоновки Java.
  1. Откройте проекцию Java. Откройте меню Файл и выберите Окно > Открыть проекцию > Java.
  2. Откройте окно свойств проекта datapoolExample. В окне Навигатор или Структура пакетов щелкните правой кнопкой на папке проекта datapoolExample и выберите пункт Свойства. Появится окно свойств datapoolExample.
  3. Добавьте tptp-models.jar в путь компоновки Java.
    • В левой панели выберите Путь компоновки Java.
    • В правой панели перейдите на вкладку Библиотеки и нажмите кнопку Добавить переменную... Появится окно Новая элемент переменной Classpath.
    • Выберите переменную ECLIPSE_HOME и нажмите кнопку Расширить... Появится окно Расширение переменной. Откройте папку plugins > org.eclipse.tptp.platform.models_версия и выберите файл tptp-models.jar, где версия - версия TPTP в вашей системе.
    • Нажмите кнопку OK, чтобы добавить библиотеку.
  4. Добавьте файл org.eclipse.emf.common_версия.jar в путь компоновки Java, где версия - версия EMF.
    • В окне Новый элемент переменной Classpath выберите переменную ECLIPSE_HOME и нажмите кнопку Расширить...
    • Откройте папку модулей и выберите org.eclipse.emf.common_версия.jar, где версия - версия EMF.
    • Нажмите кнопку OK, чтобы добавить библиотеку.
  5. Добавьте файл org.eclipse.emf.ecore_версия.jar в путь компоновки Java, где версия - версия EMF.
    • В окне Новый элемент переменной Classpath выберите переменную ECLIPSE_HOME и нажмите кнопку Расширить...
    • Откройте папку модулей и выберите org.eclipse.emf.ecore_версия.jar, где версия - версия EMF.
    • Нажмите кнопку OK, чтобы добавить библиотеку.
  6. Добавьте файл org.eclipse.core.runtime_версия.jar в путь компоновки Java, где версия - версия платформы Eclipse.
    • В окне Новый элемент переменной Classpath выберите переменную ECLIPSE_HOME и нажмите кнопку Расширить...
    • Откройте папку модулей и выберите org.eclipse.core.runtime_версия.jar, где версия - версия платформы Eclipse.
    • Нажмите кнопку OK, чтобы добавить библиотеку.
  7. Нажмите кнопку OK, чтобы закрыть окно Свойства.


Работа с API пула данных

В ходе выполнения этой процедуры нужно изменить класс shoppingCartTest_src и метод testShoppingCartConstructor для применения пула данных shoppingCartDatapool.
  1. Откройте проекцию Java, если она еще не открыта. Откройте меню Файл и выберите Окно > Открыть проекцию > Java.
  2. Откройте файл shoppingCartTest_src.java. Для этого нужно открыть папку проекта datapoolExample в Навигаторе и дважды щелкните на файле shoppingCartTest_src.java. Файл shoppingCartTest_src.java будет открыт в редакторе Java.
  3. Добавьте следующие операторы импорта в класс shoppingCartTest_src.
    import org.eclipse.hyades.models.common.datapool.impl.*; import org.eclipse.hyades.execution.runtime.datapool.*;
  4. Объявите экземпляр класса IDatapoolIterator. Этот экземпляр класса будет инициализирован при настройке и использоваться в методах тестирования.
    public class shoppingCartTest_src extends HyadesTestCase {
    	
    	IDatapoolIterator dpIterator;
    	
    	//...
  5. Добавьте оператор инициализации пула данных в метод setUp. В среде тестирования JUnit TPTP метод setUp применяется для первоначальной настройки. Методом setUp можно пользоваться для инициализации переменных теста. Примечание: укажите полный путь к рабочей области вместо значения <рабочая-область> в коде конструктора java.io.File.
    protected void setUp() throws Exception {
    	// Initialize the datapool factory
    	IDatapoolFactory dpFactory = new Common_DatapoolFactoryImpl();
    		
    	// Load the shoppingCartDatapool datapool
    	IDatapool datapool = dpFactory.load(
    			new java.io.File("<рабочая-область>\\datapoolExample\\shoppingCartDatapool.datapool"),
    			false);
    		
    	// Create an iterator to traverse the datapool
    	dpIterator = dpFactory.open(datapool,"org.eclipse.hyades.datapool.iterator.DatapoolIteratorSequentialPrivate");
    	
    	// Initialize the datapool to traverse the first equivalence class.
    	dpIterator.dpInitialize(datapool,0);
    }
    Примечания:
    • Второй параметр метода load IDatapoolFactory указывает, общий ли экземпляр пула данных. Если ему присвоено значение true, кэш пулов данных проверяется на наличие копии этого пула данных. Если этому параметру присвоено значение false, данный экземпляр пула данных будет частным. Изменение общего пула данных может повлиять на других пользователей, поэтому следует делать это с осмотрительностью.
    • Если вы хотите автоматизировать изменение пула данных, импортируйте org.eclipse.hyades.edit.datapool.
    • Второй параметр метода open IDatapoolFactory задает тип счетчика. С общими пулами данных применяется DatapoolIteratorSequentialPrivate.
  6. Измените метод testShoppingCartConstructor таким образом, чтобы в нем применялся пул данных shoppingCartDatapool.
    public void testShoppingCartConstructor()
    throws Exception
    {
    	MyShoppingCart cart = new MyShoppingCart();
    		
    	// Traverse through datapool...
    	// Test if constructor initializes each flower record appropriately
    	while(!dpIterator.dpDone())
    	{
    		String Description = dpIterator.dpCurrent().getCell("Description").getStringValue();
    		double datapoolPrice = dpIterator.dpCurrent().getCell("Price").getDoubleValue();
    		
    		// Test if the flower is accounted for in the application
    		Double applicationPrice;
    		assertNotNull(applicationPrice = (Double)cart.myFlowers.get(Description));
    		
    		// Test that the application price equals the price in the datapool
    		assertTrue(applicationPrice.doubleValue() == datapoolPrice);
    		
    		dpIterator.dpNext();
    	}
    }
  7. Сохраните файл shoppingCartTest_src.java. Откройте меню Файл и выберите Файл > Сохранить.
  8. Добавьте пул данных в testArtifact.
    • Откройте проекцию Тестирование. Дважды щелкните на testDeployment в Навигаторе, чтобы открыть его в редакторе.
    • Выберите testAsset на вкладке Пары и нажмите кнопку Открыть...
    • Откройте вкладку Ресурсы теста и нажмите кнопку Добавить.... Выберите пул данных и нажмите кнопку OK. Сохраните ресурс.
  9. Выполните тест в своем развертывании.
    • Откройте проекцию Тестирование. В Навигаторе тестов щелкните правой кнопкой мыши на комплекте shoppingCartTest_src и выберите Выполнить как > Выполнить.... Появится окно Конфигурация выполнения.
    • В левой панели окна Конфигурация выполнения выберите комплект тестов shoppingCartTest_src.
    • В правой панели окна Конфигурация выполнения выберите развертывание, созданное при выполнении процедуры из раздела Перед тем как начать.
    • На вкладке Протоколы теста снимите отметку с поля Использовать значения по умолчанию и выберите папку проекта datapoolExample в качестве расположения.
    • Нажмите кнопку Выполнить для запуска теста.
  10. Дважды щелкните на новом протоколе теста shoppingCartTest_src в окне Навигатора тестов. Будет показано содержимое протокола теста shoppingCartTest_src. Откройте вкладку События для просмотра подробной информации о результатах выполнения теста.


Связанные концепции
Общие задачи и понятия тестирования

Связанные задачи
Создание развертывания теста
Выполнение тестов с изменяющимися данными
Создание теста JUnit вручную

(C) Copyright IBM Corporation 2000, 2006.Все права защищены.