Как передавать в @BeforeMethod ITestContext context + переменную (Object obj)?

rest-assured, testng, maven
У меня не получилось :
Не могу в setUp метод для api тестов добавить ITestContext context и Object obj (тело запроса)
может кото-нибудь посоветует костылек
Код


    @BeforeMethod()
    public void setUp(Object requestBody, ITestContext context) {

        String base_url = context.getCurrentXmlTest().getParameter("base_url");
        String restSecurityToken = new GenerateRestSecurityToken().restSecurityToken(requestBody);
        RequestSpecification = new RequestSpecBuilder().
                setBaseUri(base_url)
                .addHeader("Rest-Security-Token", restSecurityToken)
                .build();
    }```

Логи и ошибка вот такая ...
TestNG 
Can inject only one of <ITestContext, XmlTest, Me...

Я бы сказал что тут как минимум изначально не совсем корректная постановка вопроса. Если коротко отвечать на него то “никак”. Если развёрнуто, то никак, потому что это начисто лишено смысла. Для решения задачи есть два варианта:
1 - @BeforeMethod - это “последняя” аннотация перед самим тестом. Первый уровень “Выше” это @BeforeClass, который распространяется на каждый/весь класс. Наиболее логичным было бы получить нужный RequestBody в нём и засунуть его в static поле класса приблизительно так:

public class SuperTest {
    protected static Object requestBody;
    
    @BeforeClass
    public void init(){
        requestBody = "AAA";
    }
    
    @BeforeMethod
    public void setup(){
        System.out.println(requestBody);
    }
}

2 - Если прям уж очень сильно хочется поиграть в передачу данных, то есть способ засунуть нужную переменную прямо в ITestContext, собственно говоря он и предназначен для того чтобы хранить там разные данные по тесту, и создатели фреймворка побеспокоились о том чтобы была возможность запихивать туда кастомные данные:

    @BeforeSuite
    public void suiteSetup(ITestContext context) {
        context.setAttribute("NAME","value");
}
    @BeforeMethod
    public void setup(ITestContext context){
        Object obj = context.getAttribute("NAME");
    }

Но вот за такойподход на код ревью могут попросить и ответить.

1 лайк