Подтвердить что ты не робот

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

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

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

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 должно быть getTestThatJustRanMethodName.

4b9b3361

Ответ 1

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

@AfterMethod
public void afterMethod(ITestResult result) {
  System.out.println("method name:" + result.getMethod().getMethodName());
}

Ответ 2

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

import java.lang.reflect.Method;

@BeforeMethod
public void nameBefore(Method method)
{
    System.out.println("Test name: " + method.getName());       
}

Ответ 3

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

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

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

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

Ответ 4

Другой (хотя и не такой простой, как Cedric answer) способ, которым 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);

Ответ 5

В моем собственном проекте я получаю доступ к этим данным благодаря 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);
    }
};