Рубрики
Без рубрики

Тестирование @Заводская аннотация

Аннотация фабрики тестирования, Заводские параметры TestNG, Фабрика тестирования с поставщиком данных, конструктор тестовых классов TestNG, учебник по аннотациям TestNG, учебник по методу фабрики TestNG.

Автор оригинала: Pankaj Kumar.

Аннотация Testing @Factory используется для указания метода в качестве фабрики для предоставления объектов, которые будут использоваться при тестировании для тестовых классов. Метод, помеченный аннотацией @Factory , должен возвращать массив объектов.

Тестирование @Заводская аннотация

Фабрика тестирования полезна, когда вы хотите запустить несколько тестовых классов через один тестовый класс. Давайте рассмотрим краткий пример тестирования заводской аннотации.

Допустим, у нас есть два тестовых класса с несколькими определенными методами тестирования.

package com.journaldev.utils;

import org.testng.annotations.Test;

public class Test1 {

	@Test
	public void test1() {
		System.out.println("Test1 test method");
	}
}
package com.journaldev.utils;

import org.testng.annotations.Test;

public class Test2 {

	@Test
	public void test2() {
		System.out.println("Test2 test method");
	}
}

Теперь мы можем определить фабричный метод, который возвращает массив объектов вышеуказанных классов.

package com.journaldev.utils;

import org.testng.annotations.Factory;

public class TestNGFactory {

	@Factory()
	public Object[] getTestClasses() {
		Object[] tests = new Object[2];
		tests[0] = new Test1();
		tests[1] = new Test2();
		return tests;
	}
	
}

На изображении ниже показан результат выполнения вышеуказанного класса в качестве тестового класса TestNG.

Вот вывод, полученный в консоли Eclipse.

[RemoteTestNG] detected TestNG version 6.14.3
Test1 test method
Test2 test method
PASSED: test1
PASSED: test2

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

Обратите внимание, что если мы сделаем сборку maven и в ней будет больше тестовых классов TestNG, все они также будут выполнены. У меня есть еще один тестовый класс для тестирования, и ниже приведен результат сборки maven.

Running TestSuite
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@3224f60b
Test2 test method
Test3 test method
Test1 test method
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.342 sec

Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

Поэтому, если тестовый класс возвращается любым заводским методом, он исключается из набора тестов по умолчанию.

Мы также можем создать несколько методов @Factory в одном и том же тестовом классе или в разных тестовых классах.

Испытательная фабрика с поставщиком данных

Когда мы создаем проект, все наши тестовые случаи выполняются. Так в чем же преимущество использования заводского метода?

Что ж, это полезно, когда вы используете его с поставщиком данных, а у конструктора тестового класса есть аргументы.

Допустим, наш Test1 класс определен как:

package com.journaldev.utils;

import org.testng.annotations.Test;

public class Test1 {

	private String str;
	
	public Test1(String s) {
		this.str = s;
	}
	
	@Test
	public void test1() {
		System.out.println("Test1 test method. str = "+str);
	}
}

Если мы просто запустим этот класс как тестовый класс TestNG, то он присвоит значение по умолчанию строковому аргументу конструктора и выдаст следующий вывод.

Test1 test method. str = Default test
PASSED: test1

В этом случае мы можем использовать dataProvider вместе с фабрикой для предоставления входных данных для конструктора.

package com.journaldev.utils;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;

public class TestNGFactory {

	@Factory(dataProvider = "dp")
	public Object[] getTestClasses(String s) {
		Object[] tests = new Object[2];
		tests[0] = new Test1(s);
		tests[1] = new Test2();
		return tests;
	}
	
	@DataProvider
	public Object[] dp() {
		return new Object[] {"A", "B"};
	}
}

Когда мы запускаем выше тестовый класс, он выдает следующий результат.

Test1 test method. str = A
Test1 test method. str = B
Test2 test method
Test2 test method
PASSED: test1
PASSED: test1
PASSED: test2
PASSED: test2

Резюме

Методы фабрики тестирования полезны, когда в ваших тестовых классах есть конструкторы с аргументами или вы хотите создать другой набор тестовых классов и выполнить их сразу.