Spring boot 类的junitparameter异常对象
我有一个junit测试。 我在Spring4.1中使用JUnitParamsRunner,我无法解决这个问题 我想用这个对象运行这个测试,使它更像这个测试。 但每次跑步我都会犯同样的错误。当我在谷歌上寻找其他结果时,我看到了和我一样的结果,对他们来说,测试效果很好Spring boot 类的junitparameter异常对象,spring-boot,junit,junitparams,Spring Boot,Junit,Junitparams,我有一个junit测试。 我在Spring4.1中使用JUnitParamsRunner,我无法解决这个问题 我想用这个对象运行这个测试,使它更像这个测试。 但每次跑步我都会犯同样的错误。当我在谷歌上寻找其他结果时,我看到了和我一样的结果,对他们来说,测试效果很好 java.lang.IllegalStateException: While trying to create object of class class java.lang.String could not find constru
java.lang.IllegalStateException: While trying to create object of class class java.lang.String could not find constructor with arguments matching (type-wise) the ones given in parameters.
at junitparams.internal.InvokeParameterisedMethod.createObjectOfExpectedTypeBasedOnParams(InvokeParameterisedMethod.java:84)
at junitparams.internal.InvokeParameterisedMethod.castParamsFromObjects(InvokeParameterisedMethod.java:66)
at junitparams.internal.InvokeParameterisedMethod.<init>(InvokeParameterisedMethod.java:37)
at junitparams.internal.ParameterisedTestClassRunner.buildMethodInvoker(ParameterisedTestClassRunner.java:125)
at junitparams.internal.ParameterisedTestClassRunner.parameterisedMethodInvoker(ParameterisedTestClassRunner.java:118)
at junitparams.JUnitParamsRunner.methodInvoker(JUnitParamsRunner.java:482)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:273)
at junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:446)
at junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:393)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: java.lang.NoSuchMethodException: java.lang.String.<init>(java.lang.String, java.lang.String, java.lang.String)
at java.base/java.lang.Class.getConstructor0(Class.java:3350)
at java.base/java.lang.Class.getConstructor(Class.java:2152)
at junitparams.internal.InvokeParameterisedMethod.createObjectOfExpectedTypeBasedOnParams(InvokeParameterisedMethod.java:81)
... 20 more
java.lang.IllegalStateException:尝试创建类java.lang.String的对象时,找不到参数(类型)与参数中给定参数匹配的构造函数。
位于junitparams.internal.InvokeParameterisedMethod.createObjectOfExpectedTypeBasedOnParams(InvokeParameterisedMethod.java:84)
位于junitparams.internal.InvokeParameterisedMethod.castParamsFromObjects(InvokeParameterisedMethod.java:66)
在junitparams.internal.InvokeParameterisedMethod。(InvokeParameterisedMethod.java:37)
位于junitparams.internal.ParameterizedTestClassRunner.buildMethodInvoker(ParameterizedTestClassRunner.java:125)
位于junitparams.internal.ParameterizedTestClassRunner.ParameterizedMethodInvoker(ParameterizedTestClassRunner.java:118)
在JUnitParamsRunner.methodInvoker(JUnitParamsRunner.java:482)上
位于org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:273)
位于junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:446)
位于junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:393)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:363)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
原因:java.lang.NoSuchMethodException:java.lang.String。(java.lang.String,java.lang.String,java.lang.String)
位于java.base/java.lang.Class.getConstructor0(Class.java:3350)
位于java.base/java.lang.Class.getConstructor(Class.java:2152)
在junitparams.internal.InvokeParameterisedMethod.createObjectOfExpectedTypeBasedOnParams(InvokeParameterisedMethod.java:81)中
... 20多
测试代码:
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import junitparams.naming.TestCaseName;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(JUnitParamsRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CheckAccountTests extends UserActionBaseTests {
private final static String accountQueryParamName = "account";
private final static String regionNameQueryParamName = "regionName";
private final static String regionName = "regionTest";
private final static String nonExistentEmailAccount = "nonexistentemailaccount@cnoga.com";
private final static String nonExistentRegionName = "nonExistentRegionName";
@SuppressWarnings("FieldCanBeLocal")
private final String emailAccount = "dani@cnoga.com";
@Test
public void dummyTest() throws Exception {
for(int i = 0; i< 1000 ; i++) {
i++;
}
}
@Override
public final String get_relativeUrl() { return super.get_relativeUrl() + "/checkAccount.action"; }
@SuppressWarnings("unused")
private Object[] checkAccount_DifferentAccounts_ShouldSucceed_ParametersToTest() {
return new Object[]{
new Object[]{"Existent email account", emailAccount, regionName}};
}
@Test
@Parameters(method = "checkAccount_DifferentAccounts_ShouldSucceed_ParametersToTest")
@TestCaseName("{0}. Account: {1}, Region: {2}")
public void checkAccount_DifferentAccounts_ShouldSucceed(String account, String regionName) throws Exception {
var result = (ExceptionResult) sendRequest(getQueryParams(account, regionName), HttpStatus.OK, SysConstant.SUCCESS);
assertThat(result.getMsg()).isEqualTo("true");
}
private List<NameValuePair> getQueryParams(String account, String regionName) {
return new ArrayList<>() {
{
add(new BasicNameValuePair(accountQueryParamName, account));
add(new BasicNameValuePair(regionNameQueryParamName, regionName));
}
};
}
@SuppressWarnings("unused")
private List<NameValuePair> getQueryParams(String account) {
return getQueryParams(account, regionName);
}
}
导入junitparams.JUnitParamsRunner;
导入junitparams.Parameters;
导入junitparams.naming.TestCaseName;
导入javax.validation.constraints.NotBlank;
导入javax.validation.constraints.NotNull;
导入javax.validation.constraints.Size;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.apache.http.NameValuePair;
导入org.apache.http.message.BasicNameValuePair;
导入org.springframework.boot.test.context.SpringBootTest;
导入org.springframework.http.HttpStatus;
导入静态org.assertj.core.api.Assertions.assertThat;
@RunWith(JUnitParamsRunner.class)
@SpringBootTest(webEnvironment=SpringBootTest.webEnvironment.RANDOM\u端口)
公共类CheckAccountTests扩展了UserActionBaseTests{
私有最终静态字符串accountQueryParamName=“account”;
私有最终静态字符串regionNameQueryParamName=“regionName”;
私有最终静态字符串regionName=“regionTest”;
私有最终静态字符串不存在EnteMailAccount=”nonexistentemailaccount@cnoga.com";
私有最终静态字符串nonExistentRegionName=“nonExistentRegionName”;
@抑制警告(“FieldCanBeLocal”)
专用最终字符串emailAccount=”dani@cnoga.com";
@试验
public void dummyTest()引发异常{
对于(int i=0;i<1000;i++){
i++;
}
}
@凌驾
公共最终字符串get_relativeUrl(){return super.get_relativeUrl()+“/checkAccount.action”;}
@抑制警告(“未使用”)
私有对象[]检查帐户\u差异计数\u应成功\u参数测试(){
返回新对象[]{
新对象[]{“现有电子邮件帐户”,emailAccount,regionName};
}
@试验
@参数(方法=“checkAccount\u Differentitaccounts\u ShouldSuccessed\u ParametersToTest”)
@TestCaseName(“{0}.帐户:{1},区域:{2}”)
public void checkAccount\u differentiaccounts\u shouldSuccess(字符串帐户、字符串区域名称)引发异常{
var result=(ExceptionResult)sendRequest(getQueryParams(account,regionName),HttpStatus.OK,SysConstant.SUCCESS);
断言(result.getMsg()).isEqualTo(“true”);
}
私有列表getQueryParams(字符串帐户、字符串区域名称){
返回新的ArrayList(){
{
添加(新的BasicNameValuePair(accountQueryParamName,account));
添加(新的BasicNameValuePair(regionNameQueryParamName,regionName));
}
};
}
@抑制警告(“未使用”)
私有列表getQueryParams(字符串帐户){
返回getQueryParams(帐户、区域名称);
}
}
您的检查帐户\u DifferentAccounts\u shouldSuccessed\u parameters stotest()
方法为每次测试执行生成三个参数:
"Existent email account", emailAccount, regionName
您的测试方法只接受两个参数:
checkAccount_DifferentAccounts_ShouldSucceed(String account, String regionName)
您需要确保提供程序方法生成的参数数量与测试方法接受的参数数量相匹配。您的
检查帐户\u differantaccounts\u应该成功\u parameters stotest()
方法为每个测试执行生成三个参数:
"Existent email account", emailAccount, regionName
你