Параметризованные тесты
Параметризованные тесты означают возможность передачи параметров в тест. Эта фича реализована в JUnit 4 и в TestNG, но очень разными способами.
JUnit 4
@RunWith и @Parameter аннотации используются для передачи значения параметров в тест, @Parameters возвращает List[]. Эти значения передаются в конструктор в качестве аргумента.
Здесь довольно много ограничений:
мы должны следовать сигнатуре JUnit для объявления параметра;
параметр передается в конструктор класса для инициализации поля класса, который будет содержать значение параметра;
возвращаемый тип метода с аннотацией @Parameters должен быть List []
данные должны быть примитивного типа (String, int)
TestNG
XML файл или @DataProvider используются для передачи параметров в тест.
Параметризованный тест с XML файлом.
@Parameters - здесь аннотация для метода, в котором нужен параметр для тестирования. Данные для параметра передаются через XML конфигурационный файл. С помощью такого подхода мы можем использовать тест кейс разными входными данными и даже получать разный результат. Кроме того, любой из пользователей автотестами может иметь свои собственные параметры для запуска теста.
Юнит тест
XML файл
Некоторые из параметров можно зааннотировать с помощью @Optional с указанием значения по умолчанию (если не указать, то будут использоваться значения по умолчанию для примитивов, либо null для всех остальных типов).
Параметризованный тест с @DataProvider.
Использование XML файла для передачи данных может быть очень удобным, однако иногда тесты требуют сложные типы данных, которые нельзя представить в виде String или примитивных типов (классы, структуры данных). В TestNG в такой ситуации можно использовать @DataProvider, который может передавать в тест данные любого типа.
@DataProvider для вектора, строки или целого числа в качестве параметра:
@DataProvider для объекта в качестве параметра, где “TestNGTest6_3_0” объект с get set методами для демо:
Параметризованные тесты с TestNG очень гибкие и "юзер-френдли" (как вариант с XML, так и с DataProvider). Поддерживаются любые типы данных для передачи в тест. Кроме того, @DataProvider могут быть вынесены в отдельный класс для удоства в отличии от JUnit, где метод, метод отдающий параметры должен быть в отдельном классе.
Вопрос 1. Подумайте, чем отличаются @Parameters в TestNG от JUnit. Что из них больше соотносится с DDT (Data Driven Testing)?
Last updated