Java для автоматизаторов
  • Introduction
  • Java. Введение
    • Java как язык и платформа
    • Установка и настройка
  • Язык Java. Основы
    • Hello World
    • Переменные
    • Типы данных
    • Строки
    • Циклы "while" / "do ... while"
    • Циклы "for"
    • Условный оператор "if / if ... else"
    • Условный оператор "switch"
    • Массивы
    • Задания к главе
  • ООП в Java
    • Классы и объекты
    • Методы
    • Свойства
    • Параметры методов
    • Ключевое слово this
    • Конструктор
    • Модификаторы static и final
    • StringBuffer
    • Метод toString()
    • Метод equals()
    • Наследование
    • Пакеты
    • Интерфейсы
    • Модификаторы Public, Private и Protected
    • Полиморфизм
    • Инкапсуляция
    • Использование обобщений
    • Generics and Wildcards
    • Анонимные классы
    • Исключения
    • Множественные исключения
    • Абстрактные классы
    • Вложенные классы
    • Тип Enum
    • Задания к главе
  • Коллекции
    • ArrayList
    • Linked Lists
    • HashMap
    • Sets (Множества)
    • Sorted Maps
    • Задание порядка в множестве ( natural ordering )
    • Очередь (Queue)
    • Использование итераторов
    • Создание объектов, реализующих интерфейс Iterable
    • Задания к главе
  • Стиль написания кода
    • Структура файла
    • Файлы-исходники
    • Открывающие комментарии
    • Сведения о пакете и импорте
    • Объявление классов и интерфейсов
    • Длина строки
    • Переносы строк
    • Переносы в объявлении методов
    • Переносы в операторе if
    • Переносы в тернарных операциях
    • Виды комментариев
    • Блочные комментарии
    • Однострочные комментарии
    • Комментарии в конце строки
    • Объявления (Декларации)
    • Операторы
    • Пропуски
    • Конвенция именования
    • Задания к главе
  • Работа с файлами
    • Работа с текстовыми файлами
    • Работа с XML файлами
    • Работа с JSON файлами
    • Property-файлы
    • Задания к главе
  • Log4j - система логирования сообщений в Java
    • Начало работы
    • Конфигурационные файлы
    • Стандартные аппендеры
    • Задания к главе
  • Юнит тестирование
    • JUnit vs TestNG. Основные аннотации
    • JUnit vs TestNG. Примеры тестов
      • Exception тесты
      • Ignore тесты
      • Тест с таймаутом
      • Тест сьюты
      • Параметризованные тесты
      • Зависимые тесты
      • Многопоточность
    • Asserts
    • Использование "заглушек" (Mocks)
  • Build инструменты
    • Build инструменты
    • Примеры конфигураций
  • Системы контроля версий. Git
    • Системы контроля версий. Git
    • Git. Установка
    • Git. Основы
    • Git. Основные команды
      • Настройка
      • Работа с репозиторием
      • Работа с удаленным сервером
      • Работа с ветками
Powered by GitBook
On this page
  • Параметризованный тест с XML файлом.
  • Параметризованный тест с @DataProvider.
  1. Юнит тестирование
  2. JUnit vs TestNG. Примеры тестов

Параметризованные тесты

Параметризованные тесты означают возможность передачи параметров в тест. Эта фича реализована в JUnit 4 и в TestNG, но очень разными способами.

JUnit 4

@RunWith и @Parameter аннотации используются для передачи значения параметров в тест, @Parameters возвращает List[]. Эти значения передаются в конструктор в качестве аргумента.

@RunWith(value = Parameterized.class)
public class JunitTest6 {

     private int number;

     public JunitTest6(int number) {
         this.number = number;
     }

     @Parameters
     public static Collection<Object[]> data() {
         Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
         return Arrays.asList(data);
     }

     @Test
     public void pushTest() {
         System.out.println("Parameterized Number is : " + number);
     }
}

Здесь довольно много ограничений:

  • мы должны следовать сигнатуре JUnit для объявления параметра;

  • параметр передается в конструктор класса для инициализации поля класса, который будет содержать значение параметра;

  • возвращаемый тип метода с аннотацией @Parameters должен быть List []

  • данные должны быть примитивного типа (String, int)

TestNG

XML файл или @DataProvider используются для передачи параметров в тест.

Параметризованный тест с XML файлом.

@Parameters - здесь аннотация для метода, в котором нужен параметр для тестирования. Данные для параметра передаются через XML конфигурационный файл. С помощью такого подхода мы можем использовать тест кейс разными входными данными и даже получать разный результат. Кроме того, любой из пользователей автотестами может иметь свои собственные параметры для запуска теста.

Юнит тест

      public class TestNGTest6_1_0 {

         @Test
         @Parameters(value="number")
         public void parameterIntTest(@Optional(1) int number) {
             System.out.println("Parameterized Number is : " + number);
         }

      }

XML файл

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
  <test name="testing">

    <parameter name="number" value="2"/>     

    <classes>
       <class name="com.fsecure.demo.testng.TestNGTest6_0" />
    </classes>
  </test>
</suite>

Некоторые из параметров можно зааннотировать с помощью @Optional с указанием значения по умолчанию (если не указать, то будут использоваться значения по умолчанию для примитивов, либо null для всех остальных типов).

Параметризованный тест с @DataProvider.

Использование XML файла для передачи данных может быть очень удобным, однако иногда тесты требуют сложные типы данных, которые нельзя представить в виде String или примитивных типов (классы, структуры данных). В TestNG в такой ситуации можно использовать @DataProvider, который может передавать в тест данные любого типа.

@DataProvider для вектора, строки или целого числа в качестве параметра:

    @Test(dataProvider = "Data-Provider-Function")
    public void parameterIntTest(Class clzz, String[] number) {
       System.out.println("Parameterized Number is : " + number[0]);
       System.out.println("Parameterized Number is : " + number[1]);
    }

    //This function will provide the patameter data
    @DataProvider(name = "Data-Provider-Function")
    public Object[][] parameterIntTestProvider() {
        return new Object[][] {
                     {Vector.class, new String[] {"java.util.AbstractList", "java.util.AbstractCollection"}},
                     {String.class, new String[] {"1", "2"}},
                     {Integer.class, new String[] {"1", "2"}}
                  };
    }

@DataProvider для объекта в качестве параметра, где “TestNGTest6_3_0” объект с get set методами для демо:

    @Test(dataProvider = "Data-Provider-Function")
    public void parameterIntTest(TestNGTest6_3_0 clzz) {
        System.out.println("Parameterized Number is : " + clzz.getMsg());
        System.out.println("Parameterized Number is : " + clzz.getNumber());
    }

    //This function will provide the patameter data
    @DataProvider(name = "Data-Provider-Function")
    public Object[][] parameterIntTestProvider() {

        TestNGTest6_3_0 obj = new TestNGTest6_3_0();
        obj.setMsg("Hello");
        obj.setNumber(123);

        return new Object[][]{
                   {obj}
        };
    }

Параметризованные тесты с TestNG очень гибкие и "юзер-френдли" (как вариант с XML, так и с DataProvider). Поддерживаются любые типы данных для передачи в тест. Кроме того, @DataProvider могут быть вынесены в отдельный класс для удоства в отличии от JUnit, где метод, метод отдающий параметры должен быть в отдельном классе.

Вопрос 1. Подумайте, чем отличаются @Parameters в TestNG от JUnit. Что из них больше соотносится с DDT (Data Driven Testing)?

PreviousТест сьютыNextЗависимые тесты

Last updated 6 years ago