Как вернуть значение @Test из расширения junit?

У меня есть тесты с аннотацией allure2 @Tmslink("1234") для каждого @Test. Итак, мне нужно получить значение @TmsLink и использовать его в моих тестах. У меня есть значение аннотации в расширении, но как я могу предоставить его для тестирования?

public class TmsLink implements BeforeTestExecutionCallback {

    private String tmsLink;

    @Override
    public void beforeTestExecution(ExtensionContext context)  {
        findAnnotation(context.getElement(), TmsLink.class).ifPresent(link -> this.tmsLink = link.value());
    }    
    public String getTmsLink() {
        return tmsLink;
    }
}

@ExtendWith(TmsLink .class)
public abstract class Tests {

}

С Junit4 это просто:

@Rule 
public TmsLink extension = new TmsLink();
extension.getTmsLink();

1 ответ

Решение

JUnit Jupiter также поддерживает программную регистрацию расширений путем аннотирования полей в тестовых классах с помощью @RegisterExtension:

class WebServerDemo {

    @RegisterExtension
    static WebServerExtension server = WebServerExtension.builder()
        .enableSecurity(false)
        .build();

    @Test
    void getProductList() {
        WebClient webClient = new WebClient();
        String serverUrl = server.getServerUrl();
        // Use WebClient to connect to web server using serverUrl and verify response
        assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
    }

}

За подробностями обращайтесь к руководству пользователя по адресу https://junit.org/junit5/docs/current/user-guide/.

Или пусть ваше расширение также реализует ParameterResolver и вводить TmsLink в качестве аргумента параметра вашего метода тестирования. Найти подробности и пример можно по https://junit.org/junit5/docs/current/user-guide/

Другие вопросы по тегам