Как получить имя метода теста, который был запущен в методе testng teardown? - PullRequest
27 голосов
/ 01 июня 2010

В основном у меня есть метод разрыва, который я хочу записать на консоль, какой тест был только что запущен. Как мне получить эту строку?

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

public class TestSomething {

    @AfterMethod
    public void tearDown() {
        System.out.println("The test that just ran was: " + getTestThatJustRanMethodName());
    }

    @Test
    public void testCase() {
       assertTrue(1 == 1);
    }
}

... должен вывести на экран: «Тест, который только что был выполнен: testCase»

Однако, я не знаю магию, которой на самом деле должно быть getTestThatJustRanMethodName. 1009 *

Ответы [ 5 ]

40 голосов
/ 02 июня 2010

Объявите параметр типа ITestResult в вашем @AfterMethod, и TestNG вставит его:

@AfterMethod
public void afterMethod(ITestResult result) {
  System.out.println("method name:" + result.getMethod().getMethodName());
}
22 голосов
/ 17 августа 2012

Если вы хотите получить имя метода до теста, вы можете использовать следующее:

import java.lang.reflect.Method;

@BeforeMethod
public void nameBefore(Method method)
{
    System.out.println("Test name: " + method.getName());       
}
3 голосов
/ 29 февраля 2016

Просто объявите параметр java.lang.reflect.Method.

 @BeforeMethod
 public void beforeTestMethod(Method testMethod){
    System.out.println("Before Testmethod: " + testMethod.getName());       
 }

Но TestNG позволяет вам вводить намного больше;)

  • Любой @ До метод или @ Test метод может объявить параметр типа ITestContext.
  • Любой метод @ AfterMethod может объявить параметр типа ITestResult, который будет отражать результат только что запущенного метода теста.
  • Любой @ До и @ После методы могут объявить параметр типа XmlTest, который содержит текущий тег.
  • Любой @ BeforeMethod @ AfterMethod ) может объявить параметр типа java.lang.reflect.Method. Этот параметр получит тестовый метод, который будет вызван после завершения этого @BeforeMethod (или после запуска метода для @AfterMethod).
  • Любой @ BeforeMethod может объявить параметр типа Object[]. Этот параметр получит список параметров, которые должны быть переданы в предстоящий метод тестирования, который может быть либо введен TestNG, например java.lang.reflect.Method, либо из @DataProvider.
  • Любой @ DataProvider может объявить параметр типа ITestContext или java.lang.reflect.Method. Последний параметр получит метод теста, который должен быть вызван.
2 голосов
/ 24 января 2019

В моем собственном проекте я получаю доступ к этим данным благодаря JUnit @Rule.

String testName;
String className;

@Rule
public TestWatcher watcher = new TestWatcher() {
    public void starting(Description description) {
        testName = description.getMethodName();
        className = description.getClassName();
        logger.info("Starting test " + testName + " in class " + className);
    }
};
2 голосов
/ 07 февраля 2017

Другой (хотя и не такой простой, как ответ Седрика ) способ, которым TestNG поддерживает это, - регистрация слушателя :

@Listeners({MethodListener.class})
public class ListenerTest {

  @Test
  public void someTest() {
  }

}

Где слушатель может выглядеть так:

public class MethodListener implements IInvokedMethodListener {

  @Override
  public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {

  }

  @Override
  public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
    System.out.println(method.getTestMethod().getMethodName());
  }
}

Этот конкретный слушатель будет выводить имя метода (т.е. someTest) на консоль. Он будет выполняться после каждого выполненного теста.

Если вы генерируете testSuite программно, вы можете добавить прослушиватель следующим образом вместо добавления @Listeners({MethodListener.class}) для каждого класса теста

    List<String> listeners = new ArrayList<String>();
    listeners.add(MethodListener.class.getName());
    testSuite.setListeners(listeners);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...