Junit5 call methos with parameter but receive error: No ParameterResolver registered for parameter

Junit5 call methos with parameter but receive error: No ParameterResolver registered for parameter

我应该执行 Junit5 测试,其中方法 'test1' 可以接收字符串参数

我需要从名为 'call_test1WithParameter' 传递参数的新 @Test 案例中再次调用此方法。

在 Junit5 中可以这样做吗? 此外,当我 运行 方法“test1”时,我收到此错误: 有一种方法可以按照我的指示执行此测试用例吗? 提前致谢

org.junit.jupiter.api.extension.ParameterResolutionException: 没有为方法 [void com.netsgroup.igfs.cg.test.IntegrationTest.MyTest.test1(org.junit.jupiter.api.TestInfo,java.lang.String)] 中的参数 [java.lang.String arg1] 注册 ParameterResolver。 提前感谢您对此的支持。 下面是我的测试 class:

import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


class MyTest {
    final static Logger log = LoggerFactory.getLogger(MyTest.class);
    
    @Test
    @Order(1)
    void test1(TestInfo testInfo, String myOrderId){

        log.info("Start test case: " + testInfo.getDisplayName());
        
        if (myOrderId!=null)
            log.info("MyOrderId is: " + myOrderId);
    }
    
    @Test
    @Order(2)
    void call_test1WithParameter(TestInfo testInfo){
        log.info("Start test case: " + testInfo.getDisplayName());
        test1(testInfo, "OrderId_123456");
    }

}

这是因为您在测试方法中指定了一些参数,您需要配置它以告诉 JUnit 如何解析这些参数的值。

对于JUnit提供的参数,如TestInfoTestReportRepetitionInfo,将自动解析,无需任何额外配置。

但是对于其他参数,例如您案例中的 orderId,您必须将测试用例更改为 @ParameterizedTest such that you can use @ValueSource/ @EnumSource / @MethodSource / @CsvSource or @ArgumentsSource etc. to define the actual value for the orderId (see this 以获得详细信息)。

所以将您的测试用例更改为以下应该可以解决您的问题:

@ParameterizedTest
@ValueSource(strings = {"order1" , "order2" , "order3"}) 
@Order(1)
void test1(String myOrderId , TestInfo testInfo) {

        log.info("Start test case: " + testInfo.getDisplayName());

        if (myOrderId != null)
            log.info("MyOrderId is: " + myOrderId);
}

需要注意的一点是,由参数源(即@ValueSource)解析的参数应该在参数列表中排在第一位。 (参见 this)。