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提供的参数,如TestInfo
、TestReport
或RepetitionInfo
,将自动解析,无需任何额外配置。
但是对于其他参数,例如您案例中的 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)。
我应该执行 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提供的参数,如TestInfo
、TestReport
或RepetitionInfo
,将自动解析,无需任何额外配置。
但是对于其他参数,例如您案例中的 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)。