Как вернуть значение @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/