有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在每个@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) 个答案

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

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