Как получить значение переменной в extensionContext - PullRequest
0 голосов
/ 04 мая 2020

Как мне получить значение поля результата в моем классе TestReporter?

@ExtendWith({TestReporter.class})
private TestClass{
   String result;

   @Test
   void testA(){
     //some action here
     result = some result;
   }
}
public class TestReporter implements BeforeAllCallback, BeforeTestExecutionCallback, AfterAllCallback,
       TestWatcher {
    private static ExtentHtmlReporter htmlReporter;
    private static ExtentReports extent;
    private static ExtentTest test;

    @Override
    public void beforeAll(ExtensionContext context) throws Exception {
       //set up extent report
    }


   @Override
   public void testSuccessful(ExtensionContext context) {
     //not possible, but desired
     test.pass(context.getElement.get("result"), MediaEntityBuilder.createScreenCaptureFromPath("test"+count+".png").build());

   }

}

Я искал способы сделать это, но не уверен, возможно ли то, что я ищу, или как реализовать

1 Ответ

1 голос
/ 05 мая 2020

TLDR;

Использовать отражение в расширении, которое должно реализовать соответствующий обратный вызов, например, AfterEachCallback. Захватите экземпляр класса теста через context.getRequiredTestInstance().

Длинная версия

@ExtendWith(TestReporter.class)
public class TestClass {

    String result;

    @Test
    void testA() {
        result = "some result";
    }
}

class TestReporter implements AfterEachCallback {
    @Override
    public void afterEach(final ExtensionContext context) throws Exception {
        Object testInstance = context.getRequiredTestInstance();

        Field resultField = testInstance.getClass().getDeclaredField("result");

        String resultValue = (String) resultField.get(testInstance);

        System.out.println("Value of result: " + resultValue);
    }
}

Помните, что AfterAllContext НЕ имеет доступа к экземпляру теста, потому что в тесте есть один экземпляр метод. Использование TestWatcher вместо AfterEachCallback также будет работать.

...