getRequests() 必须 return 一个可迭代的数组
getRequests() must return an Iterable of arrays
我的代码:
@RunWith(Parameterized.class)
public class FreshResultCompareRunner2 {
//This is called before @BeforeClass !
@Parameterized.Parameters
public static Collection getRequests() throws IOException {
injector = Guice.createInjector(new MainModule());
initStaticFromInjector();
initTestInput();
return OrganizeTestParameterizedInput();
}
private static void initTestInput() throws IOException {
}
private static Collection OrganizeTestParameterizedInput() {
Object[] objectMatrix = new Object[100];
for (int i = 0; i < 100; i++) {
objectMatrix[i] = i;
}
return Arrays.asList(objectMatrix);
}
returns以下异常:
getRequests() must return an Iterable of arrays
如何 运行 参数化的 junit 增加 int
仅作为输入参数?
对 i=0 ...100
说 运行 相同的测试 ?
更新
我试过了
//This is called before @BeforeClass !
@Parameterized.Parameters
public static Collection<int[]> getParameters() {
injector = Guice.createInjector(new MainModule());
initStaticFromInjector();
int numOfChunks = 3;//routingResponseShortRepository.getNumOfBaseLineChunks();
//might be less
int totalResponses = numOfChunks * globalSettings.requestsChunkSize;
Collection<int[]> params = new ArrayList<>(totalResponses);
for(int i = 1; i <= totalResponses; ++i) {
params.add(new int[] { i });
}
return params;
}
//takes the next matrix row from OrganizeTestParameterizedInput()
public FreshResultCompareRunner2(int responseId) {
this.responseId = responseId;
}
仍然出现错误:
java.lang.Exception: com.waze.routing.automation.runners.FreshResultCompareRunner2.getParameters() must return an Iterable of arrays.
at org.junit.runners.Parameterized.parametersMethodReturnedWrongType(Parameterized.java:343)
对于参数化测试,JUnit 将测试参数传递给测试的构造函数 class。因为构造函数可以采用多个参数,所以 JUnit 期望每个参数集都是一个数组。数组的元素必须符合构造函数参数。
因此您的配置方法必须 return 一个 Iterable
数组,例如Collection<Object[]>
。在您的情况下,每个 运行 只有一个参数,因此您的数组长度为 1:
@Parameterized.Parameters
public static Collection<Object[]> getParameters() {
Collection<Object[]> params = new ArrayList<>(100);
for(int i = 1; i <= 100; ++i) {
params.add(new Object[] { i });
}
return params;
}
另请注意,您的配置方法不应像您的方法看起来那样进行任何初始化!初始化仅在 @Before
或 @BeforeClass
!
中完成
Junit 4.12+ 没有这个限制了。因此,如果您使用 JUnit 4.12+ 开发测试,然后使用 4.11- 执行这些测试,您也会收到此错误消息。
有关详细信息,请参阅 JUnit 4.12 release notes。
我的代码:
@RunWith(Parameterized.class)
public class FreshResultCompareRunner2 {
//This is called before @BeforeClass !
@Parameterized.Parameters
public static Collection getRequests() throws IOException {
injector = Guice.createInjector(new MainModule());
initStaticFromInjector();
initTestInput();
return OrganizeTestParameterizedInput();
}
private static void initTestInput() throws IOException {
}
private static Collection OrganizeTestParameterizedInput() {
Object[] objectMatrix = new Object[100];
for (int i = 0; i < 100; i++) {
objectMatrix[i] = i;
}
return Arrays.asList(objectMatrix);
}
returns以下异常:
getRequests() must return an Iterable of arrays
如何 运行 参数化的 junit 增加 int
仅作为输入参数?
对 i=0 ...100
说 运行 相同的测试 ?
更新
我试过了
//This is called before @BeforeClass !
@Parameterized.Parameters
public static Collection<int[]> getParameters() {
injector = Guice.createInjector(new MainModule());
initStaticFromInjector();
int numOfChunks = 3;//routingResponseShortRepository.getNumOfBaseLineChunks();
//might be less
int totalResponses = numOfChunks * globalSettings.requestsChunkSize;
Collection<int[]> params = new ArrayList<>(totalResponses);
for(int i = 1; i <= totalResponses; ++i) {
params.add(new int[] { i });
}
return params;
}
//takes the next matrix row from OrganizeTestParameterizedInput()
public FreshResultCompareRunner2(int responseId) {
this.responseId = responseId;
}
仍然出现错误:
java.lang.Exception: com.waze.routing.automation.runners.FreshResultCompareRunner2.getParameters() must return an Iterable of arrays.
at org.junit.runners.Parameterized.parametersMethodReturnedWrongType(Parameterized.java:343)
对于参数化测试,JUnit 将测试参数传递给测试的构造函数 class。因为构造函数可以采用多个参数,所以 JUnit 期望每个参数集都是一个数组。数组的元素必须符合构造函数参数。
因此您的配置方法必须 return 一个 Iterable
数组,例如Collection<Object[]>
。在您的情况下,每个 运行 只有一个参数,因此您的数组长度为 1:
@Parameterized.Parameters
public static Collection<Object[]> getParameters() {
Collection<Object[]> params = new ArrayList<>(100);
for(int i = 1; i <= 100; ++i) {
params.add(new Object[] { i });
}
return params;
}
另请注意,您的配置方法不应像您的方法看起来那样进行任何初始化!初始化仅在 @Before
或 @BeforeClass
!
Junit 4.12+ 没有这个限制了。因此,如果您使用 JUnit 4.12+ 开发测试,然后使用 4.11- 执行这些测试,您也会收到此错误消息。
有关详细信息,请参阅 JUnit 4.12 release notes。