【问题标题】:How to return value to @Test from junit extension?如何从junit扩展返回值到@Test?
【发布时间】:2018-09-13 20:09:21
【问题描述】:

我在每个 @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();

【问题讨论】:

    标签: java junit5 allure junit5-extension-model


    【解决方案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找到链接的详细信息和示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多