TestNG - чтение пользовательских аннотаций - PullRequest
0 голосов
/ 19 февраля 2019

Требование: Считать пользовательские подробности аннотаций и сгенерировать отчет для всех классов тестирования всех комплектов.

Пробное решение: Реализован пользовательский прослушиватель с использованием ITestListener .Но не вижу прямого способа получить пользовательские подробности аннотации, используемые как часть методов тестирования, кроме нижеследующего способа.

@Override
public void onStart(ITestContext context) {
    ITestNGMethod[] testNGMethods = context.getAllTestMethods();
    for (ITestNGMethod testNgmethod : testNGMethods) {
        Method[] methods = testNgmethod.getRealClass().getDeclaredMethods();
        for (Method method : methods) {
            if (method.isAnnotationPresent(MyCustomAnnotation.class)) {
                //Get required info
            }
        }
    }
}

Внутренний цикл вызывает почти n*n (количество методов) раз для каждого класса теста.Я могу управлять им, добавляя условия.

Поскольку я новичок в среде TestNG, хотел бы узнать лучшее решение для удовлетворения моих требований, а именно: создание отчета путем считывания пользовательских подробных аннотаций из всех методов тестирования из всех комплектов..

1 Ответ

0 голосов
/ 19 февраля 2019

Вот как вы это делаете.

Я использую последнюю выпущенную версию TestNG на сегодня, 7.0.0-beta3 и использую потоки Java8

import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGMethod;

public class MyListener implements ITestListener {

  @Override
  public void onStart(ITestContext context) {
    List<ITestNGMethod> methodsWithCustomAnnotation =
        Arrays.stream(context.getAllTestMethods())
            .filter(
                iTestNGMethod ->
                    iTestNGMethod
                            .getConstructorOrMethod()
                            .getMethod()
                            .getAnnotation(MyCustomAnnotation.class)
                        != null)
            .collect(Collectors.toList());
  }

  @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
  @Target({METHOD, TYPE})
  public static @interface MyCustomAnnotation {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...