如何从junit扩展返回值到@Test?

时间:2018-09-13 20:09:21

标签: java junit5 allure junit5-extension-model

我在每个@Test上都使用了allure2 @Tmslink(“ 1234”)注释进行测试。因此,我需要获取@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 个答案:

答案 0 :(得分:3)

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/#extensions-registration-programmatic的用户指南

或者让您的扩展程序也实现ParameterResolver并将TmsLink作为测试方法参数的参数注入。查找链接到https://junit.org/junit5/docs/current/user-guide/#extensions-parameter-resolution

的详细信息和示例